我需要创建一个新变量,其中包含data.frame
中一列中的值,具体取决于另一列的值,示例如下:
library(data.table)
set.seed(pi)
DT <- data.table(
X1 = LETTERS[1:10],
X2 = letters[1:10],
Z = sample(c("X1", "X2"), 10, replace = TRUE)
)
DT[]
此代码生成以下内容
X1 X2 Z
1: A a X1
2: B b X2
3: C c X1
4: D d X1
5: E e X2
6: F f X2
7: G g X1
8: H h X1
9: I i X2
10: J j X2
现在我想要一个列W
,如果列Z
是“X1”(或“X2”)列X1
上的内容(或X2
)被选中。
一种解决方案可以是:
DT[Z == "X1", W := X1]
DT[Z == "X2", W := X2]
但我想找到一种更优雅的方法来做到这一点因为我有很多列我需要选择一个条目。
谢谢
答案 0 :(得分:2)
我们可以在遍历行序列之后使用get
DT[, W := get(Z) , 1:nrow(DT)]
或eval(as.name
DT[, W := eval(as.name(Z)) , 1:nrow(DT)]