【发布时间】:2015-03-20 18:35:59
【问题描述】:
我正在处理一个大型数据框。我正在尝试根据两个当前向量中存在的条件创建一个新向量。
考虑到数据集的大小(以及它的普遍性),我正在尝试使用 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
我觉得我错过了一些非常简单的东西。能指出我正确的方向吗?
【问题讨论】:
-
您没有指定如果 X > Y(或 X == Y)会发生什么。
-
您应该认识到
dplyr的使用对于这个问题是偶然的。 mutate 所做的只是将列添加到数据框中 --- 你使用它就好了。使用[或$或transform或data.table,这两个答案的本质都可以正常工作。