如何在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
相关产品推荐
相关产品推荐

