【发布时间】:2016-12-04 18:22:14
【问题描述】:
假设我们有以下data frame:
df <- data.frame(X1 = 1:5, X2 = 6:10, X3 = c(6, 2, 3, 0, 2))
X1 X2 X3
1 1 6 6
2 2 7 2
3 3 8 3
4 4 9 0
5 5 10 2
我想添加一个由逻辑值组成的新列 (X4)。对于每一行:如果X3 等于X1 或X2,则X4 应为TRUE,否则为FALSE。
我试过了:
mutate(df, X4 = X3 %in% c(X2, X1))
X1 X2 X3 X4
1 1 6 6 TRUE # OK
2 2 7 2 TRUE # OK
3 3 8 3 TRUE # OK
4 4 9 0 FALSE # OK
5 5 10 2 TRUE # expected to be FALSE
最重要的是,我的真实df非常很大,所以我想避免使用for-loops。我会优先考虑最短(更少的代码)和最快的解决方案。
【问题讨论】:
-
我认为你需要
mutate(df, X4 = X3 == X1 | X3 == X2)。c(X2, X1)将连接列 X1 和 X2,因此您正在检查 X3 中的元素是否来自X1和X2组合。