首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用两列进行条件交换?

如何使用两列进行条件交换?
EN

Stack Overflow用户
提问于 2018-06-29 07:40:10
回答 2查看 575关注 0票数 4

如果是BLOOD_PRESSURE_SYSTOLIC <= BLOOD_PRESSURE_DIASTOLIC,我想交换2列的值。

数据:

代码语言:javascript
复制
df <- data.frame(ID = 1:5, BLOOD_PRESSURE_SYSTOLIC = c(35, 66, NA, 104, 139), BLOOD_PRESSURE_DIASTOLIC = c(98, 46, 160, 159, NA))
# ID BLOOD_PRESSURE_SYSTOLIC BLOOD_PRESSURE_DIASTOLIC
# 1  1                      35                       98
# 2  2                      66                       46
# 3  3                      NA                      160
# 4  4                     104                      159
# 5  5                     139                       NA

所需数据:

代码语言:javascript
复制
# ID BLOOD_PRESSURE_SYSTOLIC BLOOD_PRESSURE_DIASTOLIC
# 1  1                      98                       35
# 2  2                      66                       46
# 3  3                      NA                      160
# 4  4                     159                      104
# 5  5                     139                       NA

代码:--我想出了以下代码,但它没有输出我想要的结果(特别是)。(在处理缺少的值时),它并不是真正的人类可读的。

代码语言:javascript
复制
library(dplyr)
df %>%
      mutate(BLOOD_PRESSURE_SYSTOLIC2  = if_else(BLOOD_PRESSURE_SYSTOLIC <= BLOOD_PRESSURE_DIASTOLIC, BLOOD_PRESSURE_DIASTOLIC, BLOOD_PRESSURE_SYSTOLIC),
             BLOOD_PRESSURE_DIASTOLIC2 = if_else(BLOOD_PRESSURE_SYSTOLIC <= BLOOD_PRESSURE_DIASTOLIC, BLOOD_PRESSURE_SYSTOLIC, BLOOD_PRESSURE_DIASTOLIC)) %>%
      select(ID, BLOOD_PRESSURE_SYSTOLIC = BLOOD_PRESSURE_SYSTOLIC2, BLOOD_PRESSURE_DIASTOLIC = BLOOD_PRESSURE_DIASTOLIC2)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-29 07:53:59

以R为基数:

代码语言:javascript
复制
i <- which(df$BLOOD_PRESSURE_SYSTOLIC <= df$BLOOD_PRESSURE_DIASTOLIC)

v1 <- df$BLOOD_PRESSURE_DIASTOLIC[i]
v2 <- df$BLOOD_PRESSURE_SYSTOLIC[i]

df$BLOOD_PRESSURE_SYSTOLIC[i] <- v1
df$BLOOD_PRESSURE_DIASTOLIC[i] <- v2

结果:

代码语言:javascript
复制
> df
  ID BLOOD_PRESSURE_SYSTOLIC BLOOD_PRESSURE_DIASTOLIC
1  1                      98                       35
2  2                      66                       46
3  3                      NA                      160
4  4                     159                      104
5  5                     139                       NA
票数 4
EN

Stack Overflow用户

发布于 2018-06-29 08:33:17

您可以添加一个NA条件:

代码语言:javascript
复制
library(dplyr)

df <- data.frame(ID = 1:5, BPS = c(35, 66, NA, 104, 139), BPD = c(98, 46, 160, 159, NA))

df %>%
  mutate(x = if_else(!is.na(BPD) & BPS <= BPD, BPD, BPS),
         y = if_else(!is.na(BPS) & BPS <= BPD, BPS, BPD)) %>%
  select(ID, BPS = x, BPD = y)

输出:

代码语言:javascript
复制
> df
  ID BPS BPD
1  1  98  35
2  2  66  46
3  3  NA 160
4  4 159 104
5  5 139  NA
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51096664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档