我想写一个带有条件的数据表中的列,如下所示:
dt[colour == "blue"][ , col1 := blue_func(size)]
dt[colour == "red"][ , col1 := red_func(size)]
当我在R中运行它时,它会执行,但是当我稍后调用列dt$col1
时,它会返回NULL
。
有什么想法吗?
干杯
答案 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