如何统计R数据框CV列每行中字符'V'的出现次数?
在R语言中统计数据框每行字符串中指定字符的出现次数
问题原因
你之前用rowSums(dutch4 == "V")得到全0的结果,是因为这段代码是将数据框的每个单元格整体和字符串"V"做相等判断,而CV列的每个元素是包含多个字符的字符串(比如VːxtVppVl),不是单个字符的向量,所以所有比较结果都是FALSE,求和自然为0。
三种正确实现方法
方法1:使用stringr包的str_count(最简洁)
stringr包是专门处理字符串的工具,str_count可以直接统计字符串中目标字符的出现次数:
# 未安装包先运行:install.packages("stringr") library(stringr) dutch4$vowelCount <- str_count(dutch4$CV, pattern = "V")
方法2:基础R方法(无需额外包)
用gregexpr定位字符位置,再用lengths统计数量:
dutch4$vowelCount <- lengths(gregexpr(pattern = "V", text = dutch4$CV, fixed = TRUE))
gregexpr返回每个字符串中"V"的位置索引,结果为列表格式lengths统计列表中每个元素的长度,即"V"的出现次数fixed = TRUE表示精确匹配字符,避免正则表达式规则干扰
方法3:拆分字符后统计(基础R)
先把每个字符串拆成单个字符的向量,再统计其中"V"的数量:
dutch4$vowelCount <- sapply(strsplit(dutch4$CV, split = ""), function(x) sum(x == "V"))
strsplit将每个字符串按空字符拆分,得到单个字符的向量列表sapply遍历列表中的每个向量,统计等于"V"的元素个数
验证结果
运行任意一种方法后,dutch4会新增vowelCount列,结果如下:
| DutchOrthography | IPA | CV | vowelCount |
|---|---|---|---|
| aagtappel | aːxtɑppɛl | VːxtVppVl | 3 |
| aagt | aːxt | Vːxt | 1 |
| aaibaar | aːjɪbaːr | VːjVbVːr | 3 |
| aaibaarheid | aːjɪbaːrhɛjt | VːjVbVːrhVjt | 4 |
| aaien | aːjɛn | VːjVn | 2 |
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

