如何将data.table子集的数值除以5?处理NA值报错问题
解决data.table数值除法报错的方法
报错原因
你的dt[3:.N,-1]选取的id和val列是字符类型(因为列内前两行是字符串,整个向量被强制转换为字符类型),字符无法直接执行除法运算,因此触发报错。
解决方案
方案一:将列转为数值类型(前两行字符变为NA)
适合不需要保留前两行字符内容的场景,直接统一列类型为数值后计算:
# 把id、val列转换为数值类型,前两行字符会转为NA dt[, c("id", "val") := lapply(.SD, as.numeric), .SDcols = c("id", "val")] # 对第3行到最后一行的id、val列执行除以5的操作,NA除以5仍为NA dt[3:.N, c("id", "val") := lapply(.SD, function(x) x/5), .SDcols = c("id", "val")]
方案二:保留前两行字符,仅计算后续数值
适合需要保留前两行字符串内容的场景,单独处理后续行的数值:
# 处理id列:仅转换第3行及之后的数值字符计算,NA保留 dt[3:.N, id := ifelse(is.na(id), NA, as.character(as.numeric(id)/5))] # 处理val列:同理 dt[3:.N, val := ifelse(is.na(val), NA, as.character(as.numeric(val)/5))]
内容的提问来源于stack exchange,提问作者Zach Fara
相关产品推荐
相关产品推荐

