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

从data.table多列提取多数值并生成新列的技术需求

提取data.table每行多数值的解决方案

针对给定的data.table数据框,需要从a至e列中提取每行的多数值(仅取值0或4)并生成新列,以下是两种高效实现方法:

方法一:行求和判断法

通过统计每行中4的出现次数,若次数≥3(5列的多数阈值)则取4,否则取0:

library(data.table)

# 构建示例数据
df <- data.table(id = 1:7,
                 reg = c("DD","BB","MA","CA","MN","KA","LA"),
                 a = c(4,4,0,4,0,4,0),
                 b = c(0,4,0,4,0,4,0),
                 c = c(4,0,4,4,4,4,0),
                 d = c(0,4,0,4,0,4,4),
                 e = c(0,4,4,4,0,4,0),
                 card = c("two","three","one","one","two","three","six")
)

# 添加多数值列
df[, majority := ifelse(rowSums(.SD == 4) >= 3, 4, 0), .SDcols = a:e]

方法二:逐行计算众数法

利用apply结合table统计每行的众数,适合扩展到多取值场景:

df[, majority := apply(.SD, 1, function(x) {
  count_table <- table(x)
  as.integer(names(count_table)[which.max(count_table)])
}), .SDcols = a:e]

最终输出结果

执行上述任意方法后,数据框会新增majority列,结果如下:

id reg a b c d e   card majority
1:  1  DD 4 0 4 0 0    two        0
2:  2  BB 4 4 0 4 4  three        4
3:  3  MA 0 0 4 0 4    one        0
4:  4  CA 4 4 4 4 4    one        4
5:  5  MN 0 0 4 0 0    two        0
6:  6  KA 4 4 4 4 4  three        4
7:  7  LA 0 0 0 4 0    six        0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 06:48:20