在dplyr::mutate中使用条件
我正在处理一个大数据帧。我试图根据两个当前向量中存在的条件创建一个新向量 考虑到数据集的大小(以及它的总体惊人性),我正试图使用dplyr找到一个解决方案,这导致了我的变异。我觉得我离这里不远了,但我就是找不到解决问题的办法 我的数据框类似于:在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
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