R Data.Table创建一个带条件的变量

时间:2015-04-13 16:46:41

标签: r conditional data.table

我需要在下面的数据集中创建一个新变量:

A  X
a  1
b  2
c  3
d  4
e  5
f  6
g  7
h  8
i  9
j 10

如果newvar等于2,5,7或9,则X的值为1.否则,newvar应为0.

代码:

dt1 <- data.table(A = letters[1:10], X = 1:10, key = "X")
numberlist <- list(2,5,7,9)

我根据帖子here尝试了以下内容:

dt1[, newvar:=.SD, .SDcols = 0][%in% numberlist, newvar:=.SD, .SDcols = 1]
dt1[, newvar:=.SD, .SDcols = 0][X %in% numberlist, newvar:=.SD, .SDcols = 1]

dt1[, newvar:=.SD, .SDcols = 0]表示“将值0赋值给newvar作为默认选项。第二个括号[%in% numberlist, newvar:=.SD, .SDcols = 1]表示”如果键(X)包含在数字列表中,请设置newvar值到1。

知道它为什么不起作用?

1 个答案:

答案 0 :(得分:3)

尝试

dt1[, newvar:=(X %in% c(2,5,7,9))+0L][]
#     A  X newvar
# 1: a  1      0
# 2: b  2      1
# 3: c  3      0
# 4: d  4      0
# 5: e  5      1
# 6: f  6      0
# 7: g  7      1
# 8: h  8      0
# 9: i  9      1
#10: j 10      0

或者,如果我们已经将匹配元素存储在向量

numberlist <- c(2,5,7,9)
dt1[, newvar:=as.numeric(X %in% numberlist)] 

as.numeric是将逻辑向量强制转换为0/1值的另一种选择。