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

如何在R中通过非精确匹配实现数据列的数值汇总计数?

解法1:自动提取前缀统计(适配前缀不固定的场景,效率高)

针对上万行的data.table,直接用自带语法处理性能最优,不会出现卡顿:

library(data.table)
# 示例数据
dt1 <- data.table (place = c("a north", "a south", "b south", "a north", "c west", "b north", "c south", "a west", "b west"))

# 统计代码
res <- dcast(dt1[, .(prefix = sub(" .*", "", place))], . ~ prefix, length)[, -1]

运行后输出的res就是你要的结果:

a b c
1: 4 3 2

逻辑说明:

  • sub(" .*", "", place)用正则替换删除第一个空格及之后的所有内容,提取出开头的a/b/c前缀
  • dcast将长表转为宽表,用length函数统计每个前缀的出现次数
  • 末尾[, -1]删除dcast生成的无意义占位列,直接输出目标格式

解法2:固定匹配指定字符(仅统计a/b/c时更直观)

如果只需要统计固定的a、b、c三个前缀的出现次数,可以直接用正则匹配计数:

res <- dt1[, .(
  a = sum(grepl("^a", place)),
  b = sum(grepl("^b", place)),
  c = sum(grepl("^c", place))
)]

^a表示匹配以a开头的字符串,sum对逻辑值求和直接得到符合条件的行数,性能同样适合大数据量场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:48:03