条件写入R中的数据表列

时间:2014-09-08 22:50:01

标签: r data.table

我想写一个带有条件的数据表中的列,如下所示:

dt[colour == "blue"][ , col1 := blue_func(size)]
dt[colour == "red"][ , col1 := red_func(size)]

当我在R中运行它时,它会执行,但是当我稍后调用列dt$col1时,它会返回NULL

有什么想法吗?

干杯

1 个答案:

答案 0 :(得分:1)

此处的问题是因为您要分配一个新的临时data.table,它是dt的一个子集,而不是dt本身。如:

dt <- data.table(id=1:2,colour=c("blue","red"))
dt

#   id colour
#1:  1   blue
#2:  2    red

dt[colour=="blue"]

#   id colour
#1:  1   blue

dt[colour=="blue"][, col1 := nchar(colour)]
dt

#   id colour
#1:  1   blue
#2:  2    red

如果print临时对象:

,您可以看到分配正常
print(dt[colour=="blue"][, col1 := nchar(colour)])

#   id colour col1
#1:  1   blue    4

正如@DavidArenburg所说,如果你想要将更改注册到dt,你需要一下子全部完成:

dt[colour == "blue", col1 := nchar(colour)]
dt

#   id colour col1
#1:  1   blue    4
#2:  2    red   NA