从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
相关产品推荐
相关产品推荐

