【发布时间】:2014-04-15 18:05:17
【问题描述】:
在具有四列的大型数据框(“myfile”)中,我必须添加第五列,其值有条件地基于前四列。
首选dplyr 和mutate 的答案,主要是因为它在大型数据集中的速度。
我的数据框如下所示:
V1 V2 V3 V4
1 1 2 3 5
2 2 4 4 1
3 1 4 1 1
4 4 5 1 3
5 5 5 5 4
...
第五列(V5)的值是基于一些条件规则的:
if (V1==1 & V2!=4) {
V5 <- 1
} else if (V2==4 & V3!=1) {
V5 <- 2
} else {
V5 <- 0
}
现在我想使用mutate 函数在所有行上使用这些规则(以避免慢循环)。像这样的东西(是的,我知道这样不行!):
myfile <- mutate(myfile, if (V1==1 & V2!=4){V5 = 1}
else if (V2==4 & V3!=1){V5 = 2}
else {V5 = 0})
这应该是结果:
V1 V2 V3 V4 V5
1 1 2 3 5 1
2 2 4 4 1 2
3 1 4 1 1 0
4 4 5 1 3 0
5 5 5 5 4 0
如何在dplyr 中执行此操作?
【问题讨论】:
-
说明 V1..4 是否都是整数(不是因子、逻辑、字符串或浮点数)是否有用?你关心正确处理
NA, (NaN, +Inf, -Inf)吗? -
如果速度似乎是首选
dplyr的问题,那么我最好使用data.table。