R data.table按列统计唯一值出现次数避免循环复用的实现方案
R data.table 多列唯一值计数解决方案
你原有写法的问题在于data.table的j位置返回不同行数的对象时,会自动触发循环补齐规则,才会出现结果失真和警告,以下是两种需求的实现代码:
方案2(优先推荐:长格式data.table输出)
library(data.table) # 测试数据 dt <- data.table(a=c(1,1,2,3,7),b=c(4,5,6,4,4)) # 核心统计代码 dt_final <- melt(dt, measure.vars = names(dt))[, .N, keyby = .(column = variable, agg = value)] # 可选:调整列顺序和示例完全匹配 setcolorder(dt_final, c("agg", "N", "column"))
运行输出结果:
> dt_final agg N column 1: 1 2 a 2: 2 1 a 3: 3 1 a 4: 7 1 a 5: 4 3 b 6: 5 1 b 7: 6 1 b
方案1(列表输出)
newlist <- unlist(lapply(names(dt), function(col) { col_stats <- dt[, .N, by = get(col)] setNames(list(col_stats[[1]], col_stats[[2]]), paste0(col, c(".agg", ".N"))) }), recursive = FALSE)
运行输出结果:
> newlist $a.agg [1] 1 2 3 7 $a.N [1] 2 1 1 1 $b.agg [1] 4 5 6 $b.N [1] 3 1 1
内容的提问来源于stack exchange,提问作者moth
相关产品推荐
相关产品推荐

