R语言:按行统计指定列特定字符出现次数并生成新列
解决R语言按行统计字符串出现次数的问题
原始数据
首先定义目标数据框:
Var1 <- c("Hnt_Pri_Pri_Sec_Sup", "Hnt_Sup_Sup_Sec_Sec", "Hnt_Pri_Sec_Pri_Sup") Var2 <- c("LiG_Pri_Sec_Sec_Sup", "LiG_Sec_Sup_Pri_Sup", "LiG_Pri_Pri_Pri_Pri") Var3 <- c("Nam_Pri_Pri_Sec_Pri", "Nam_Sec_Sec_Sup_Pri", "Nam_Sup_Pri_Pri_Sec") df <- data.frame(Var1, Var2, Var3)
原始数据输出:
df Var1 Var2 Var3 1 Hnt_Pri_Pri_Sec_Sup LiG_Pri_Sec_Sec_Sup Nam_Pri_Pri_Sec_Pri 2 Hnt_Sup_Sup_Sec_Sec LiG_Sec_Sup_Pri_Sup Nam_Sec_Sec_Sup_Pri 3 Hnt_Pri_Sec_Pri_Sup LiG_Pri_Pri_Pri_Pri Nam_Sup_Pri_Pri_Sec
需求
- 按行统计字符串
"Pri"的出现次数,生成新列pri_count - 按相同逻辑统计
"Sec"的出现次数,生成新列sec_count
解决方案
使用stringr包中的str_count函数,结合sapply和rowSums实现按行统计:
- 加载
stringr包:
library(stringr)
- 统计
"Pri"的出现次数并生成pri_count列:
df$pri_count <- rowSums(sapply(df, str_count, pattern = "Pri"))
- 统计
"Sec"的出现次数并生成sec_count列:
df$sec_count <- rowSums(sapply(df, str_count, pattern = "Sec"))
最终结果
执行上述代码后,数据框输出如下:
df Var1 Var2 Var3 pri_count sec_count 1 Hnt_Pri_Pri_Sec_Sup LiG_Pri_Sec_Sec_Sup Nam_Pri_Pri_Sec_Pri 6 4 2 Hnt_Sup_Sup_Sec_Sec LiG_Sec_Sup_Pri_Sup Nam_Sec_Sec_Sup_Pri 2 5 3 Hnt_Pri_Sec_Pri_Sup LiG_Pri_Pri_Pri_Pri Nam_Sup_Pri_Pri_Sec 8 2
说明
之前使用str_count失败的核心原因是直接将整个数据框传入函数,未逐列处理。通过sapply遍历数据框的每一列,对每个元素统计目标字符串的出现次数,得到次数矩阵后,再用rowSums对每行的次数求和,即可得到每行的总出现次数。
内容的提问来源于stack exchange,提问作者CNiessen
相关产品推荐
相关产品推荐

