You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言data.table使用rowSums取子集时保留原始行号的问题咨询

你之前的写法出错是因为新增的row列为字符类型,在执行dt>=5的比较时,R会自动将数值5强转为字符串类型,所有row列的值("row1"、"row2"、"row3")按字典序和字符串"5"比较时结果均为TRUE,导致每一行的判断结果都为真。

解决方案1:指定参与数值比较的列

仅选择需要判断的数值列传入rowSums,排除行标识列:

dt <- data.table(a=c(1,2,3),b=c(4,5,6),row=c('row1','row2','row3'))
# 显式指定a、b列参与比较
dt[rowSums(dt[, .(a,b)] >=5) > 0]

解决方案2:自动筛选数值列参与计算

如果数值列较多,可通过.SDcols参数自动选择所有数值列,不用手动罗列:

# is.numeric会自动筛选所有数值类型的列参与计算
dt[rowSums(dt[, .SD, .SDcols = is.numeric] >=5) > 0]

解决方案3:筛选后再生成行标识

如果不需要提前保留行标识,也可以在筛选完成后再添加,避免标识列干扰数值比较逻辑:

dt <- data.table(a=c(1,2,3),b=c(4,5,6))
# 先筛选,再通过.I生成原始行标识
result <- dt[rowSums(dt >=5) > 0][, row := paste0("row", .I)]

以上三种方法运行后都可以得到你需要的结果:

a b  row
1: 2 5 row2
2: 3 6 row3

内容的提问来源于stack exchange,提问作者moth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:36:02