如何统计R语言数据框单元格内特定字符串的多次出现次数
统计数据框中逗号分隔字符串的特定值出现次数
你的数据框speech_N_rows结构如下:
# channel start.time stop.time vp id overlaps # 1: A 0.000 9.719 N 1 A:EE, C:N # 2: A 9.719 11.735 N 2 A:N, D:other, A:N # 3: C 0.264 2.032 N 3 A:N # 4: B 26.514 28.264 N 4 B:CH1, D:N # 5: D 82.316 82.702 N 5 C:CH2, B:CH2 # 6: D 10.354 11.666 N 6 A:EE, A:other # 7: C 80.251 82.719 CH2 7 D:self, B:CH2 # 8: B 27.564 30.819 CH1 8 B:CH1, D:N # 9: D 25.621 27.693 N 9 B:CH1, B:CH1 #10: A 10.354 11.666 other 10 A:EE, D:other #11: B 80.251 82.719 CH2 11 D:self, C:CH2 #12: B 61.564 64.819 CH1 12 A:N #13: A 60.621 62.693 N 13 B:CH1
当前用grep只能统计包含"A:N"的行数(结果为3),但实际"A:N"总共出现4次(第2行包含2次),以下是两种可行的解决方案:
方法1:基础R实现
通过拆分字符串后逐一匹配统计:
# 将overlaps列的所有内容按逗号(含后续空格)拆分,转为一维向量 all_overlaps <- unlist(strsplit(speech_N_rows$overlaps, ",\\s*")) # 统计"A:N"的总出现次数 sum(all_overlaps == "A:N") # 输出结果:[1] 4
方法2:使用stringr包(tidyverse生态)
直接统计每个单元格内目标字符串的出现次数再求和:
library(stringr) # 统计每个单元格中"A:N"的出现次数,汇总总数 sum(str_count(speech_N_rows$overlaps, fixed("A:N"))) # 输出结果:[1] 4
注:fixed("A:N")用于避免冒号被当作正则表达式元字符,确保精确匹配。
内容的提问来源于stack exchange,提问作者Wangana
相关产品推荐
相关产品推荐

