使用R中data.table的另一行中的值选择列

时间:2016-09-14 18:34:56

标签: r data.table

我需要创建一个新变量,其中包含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]

但我想找到一种更优雅的方法来做到这一点因为我有很多列我需要选择一个条目。

谢谢

1 个答案:

答案 0 :(得分:2)

我们可以在遍历行序列之后使用get

DT[, W :=  get(Z) , 1:nrow(DT)]

eval(as.name

DT[,  W := eval(as.name(Z)) , 1:nrow(DT)]