繁体   English   中英

在dplyr :: mutate中使用条件

[英]Using conditions in dplyr::mutate

我正在使用大型数据框。 我正在尝试根据两个当前向量中存在的条件创建一个新向量。

鉴于数据集的大小(及其一般的真棒)我试图找到使用dplyr的解决方案,这导致我变异。 我觉得我并不遥远,但我只是无法找到坚持不懈的解决方案。

我的数据框类似于:

   ID  X  Y
1   1 10 12
2   2 10 NA
3   3 11 NA
4   4 10 12
5   5 11 NA
6   6 NA NA
7   7 NA NA
8   8 11 NA
9   9 10 12
10 10 11 NA

要重新创建它:

ID <- c(1:10)
X <- c(10, 10, 11, 10, 11, NA, NA, 11, 10, 11)
Y <- c(12, NA, NA, 12, NA, NA, NA, NA, 12, NA)

我正在寻找从现有数据创建一个新的矢量'Z'。 如果Y> X,那么我希望它从Y返回值。如果Y是NA,那么我希望它返回X值。 如果两者都是NA,那么它应该返回NA。

到目前为止,我尝试使用下面的代码让我创建一个满足第一个条件但不是第二个条件的新向量。

newData <- data %>% 
        mutate(Z =
               ifelse(Y > X, Y,
               ifelse(is.na(Y), X, NA)))

> newData
   ID  X  Y  Z
1   1 10 12 12
2   2 10 NA NA
3   3 11 NA NA
4   4 10 12 12
5   5 11 NA NA
6   6 NA NA NA
7   7 NA NA NA
8   8 11 NA NA
9   9 10 12 12
10 10 11 NA NA

我觉得我错过了一些简单的事情。 可以指出我正确的方向吗?

pmax(, na.rm=TRUE)就是你要找的

data <- data_frame(ID = c(1:10),
           X = c(10, 10, 11, 10, 11, NA, NA, 11, 10, 11),
           Y = c(12, NA, NA, 12, NA, NA, NA, NA, 12, NA))  
data %>% mutate(Z = pmax(X, Y, na.rm=TRUE))
#   ID  X  Y  Z
#1   1 10 12 12
#2   2 10 NA 10
#3   3 11 NA 11
#4   4 10 12 12
#5   5 11 NA 11
#6   6 NA NA NA
#7   7 NA NA NA
#8   8 11 NA 11
#9   9 10 12 12
#10 10 11 NA 11

ifelse代码可以是

data %>%
       mutate(Z= ifelse(Y>X & !is.na(Y), Y, X))
#   ID  X  Y  Z
#1   1 10 12 12
#2   2 10 NA 10
#3   3 11 NA 11
#4   4 10 12 12
#5   5 11 NA 11
#6   6 NA NA NA
#7   7 NA NA NA
#8   8 11 NA 11
#9   9 10 12 12
#10 10 11 NA 11

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM