如何用dplyr统计dataframe列中指定变量的出现次数?
我们有一个名为myData的dataframe:
> myData Element Class 1 A 0 2 A 0 3 C 0 4 A 0 5 B 1 6 B 1 7 A 2
生成该数据的代码:
myData = data.frame(Element = c("A","A","C","A","B","B","A"),Class = c(0,0,0,0,1,1,2))
现在需要用dplyr提取Element列中"A"的出现次数,要求直接返回数字4,而非包含额外信息的tibble(原代码返回的tibble如下):
# A tibble: 1 x 2 Element counted <chr> <int> 1 A 4
原代码:
library(dplyr) myData %>% group_by(Element) %>% filter(Element == "A") %>% summarise(counted = n())
优化方案
以下几种方法都能直接返回数字4,适配后续dplyr链式操作:
方案1:过滤后统计行数
直接筛选出Element为"A"的行,再用nrow()统计行数:
library(dplyr) myData %>% filter(Element == "A") %>% nrow()
方案2:求和+提取结果
通过summarise计算匹配次数,再用pull()把结果从tibble中提取为单个数值:
myData %>% summarise(count = sum(Element == "A")) %>% pull(count)
注:sum(Element == "A")会将逻辑向量(匹配为TRUE,不匹配为FALSE)转换为数值求和,TRUE对应1,FALSE对应0,直接得到"A"的出现次数。
方案3:简洁链式写法
直接提取Element列,生成逻辑向量后求和:
myData %>% pull(Element) %>% (`==`("A")) %>% sum() # 更易读的等价写法: myData %>% pull(Element) %>% equals("A") %>% sum()
方案4:count函数+提取
先用count()统计各元素的出现次数,再筛选出"A"的行并提取计数:
myData %>% count(Element) %>% filter(Element == "A") %>% pull(n)
内容的提问来源于stack exchange,提问作者Curious Jorge - user9788072
相关产品推荐
相关产品推荐

