如何用data.table语法按指定行索引替换列值?
解决data.table指定行赋值的类型不匹配问题
错误原因
你遇到的警告是因为:用d1$test <- NA创建列时,NA默认是逻辑型(logical),而vals是数值型(double),类型不匹配导致赋值异常。
正确解决方案
方法1:先创建数值型空列,再赋值
通过data.table语法添加数值型的NA列(用NA_real_指定数值型缺失值),再对目标行赋值:
# 初始化data.table d1 <- data.table(v1 = c(1,2,3,4,5,6), v2 = c(5,5,5,5,5,5)) # 添加数值型test列,初始为NA d1[, test := NA_real_] # 定义目标行和对应值 rows <- c(5,6) vals <- c(6,3) # 执行赋值 d1[rows, test := vals]
方法2:转换已有列类型后赋值
如果已经用d1$test <- NA创建了逻辑型列,先将列转换为数值型,再执行赋值:
# 将test列转换为数值型 d1[, test := as.numeric(test)] # 对目标行赋值 d1[rows, test := vals]
验证结果
执行后得到的d1与你期望的结果一致:
> d1 v1 v2 test 1: 1 5 NA 2: 2 5 NA 3: 3 5 NA 4: 4 5 NA 5: 5 5 6 6: 6 5 3
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

