在dplyr::mutate中使用条件

在dplyr::mutate中使用条件,r,dataframe,dplyr,R,Dataframe,Dplyr,我正在处理一个大数据帧。我试图根据两个当前向量中存在的条件创建一个新向量 考虑到数据集的大小(以及它的总体惊人性),我正试图使用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 1

我正在处理一个大数据帧。我试图根据两个当前向量中存在的条件创建一个新向量

考虑到数据集的大小(以及它的总体惊人性),我正试图使用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)
ID新数据
ID X Y Z
1   1 10 12 12
2 2 10 NA
3 3 11 NA
4   4 10 12 12
5 5 11 NA
6NA NA NA
7娜娜娜娜
8 11 NA
9   9 10 12 12
101111NA
我觉得我错过了一些非常简单的东西。你能给我指出正确的方向吗?

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
data%变异(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
#6NA NA NA
#7娜娜娜娜
#8 11 NA 11
#9   9 10 12 12
#10 10 11 NA 11

如果其他代码可以

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

感谢@Khashaa为您提供的优雅解决方案!非常感谢。感谢@akrun,感谢您的努力,但很难打败Khashaa解决方案的简单性。干杯。您没有指定如果X>Y(或X==Y)会发生什么。您应该认识到,在这个问题中使用
dplyr
是偶然的。mutate所做的只是向数据帧中添加列,而且您使用它的效果很好。使用
[
$
transform
data.table
,这两个答案的本质都会很好地发挥作用。
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