在 dplyr (R) 中添加“count where”

Posted

技术标签:

【中文标题】在 dplyr (R) 中添加“count where”【英文标题】:Adding "count where" in dplyr (R) 【发布时间】:2021-12-13 08:19:08 【问题描述】:

我在 R 中使用 dplyr 库。我有以下数据:

col1 = as.factor(c("a", "a", "a", "b", "b", "c", "c", "c"))
col2 = c(1,1,0,0,1, 0, 0, 1)

dplyr_data = data.frame(col1, col2)

head(dplyr_data)
  col1 col2
1    a    1
2    a    1
3    a    0
4    b    0
5    b    1
6    c    0
7    c    0
8    c    1

我想知道是否可以直接写这样的代码:

library(dplyr)

summary_dplyr = data.frame(dplyr_data %>% group_by(col1) %>% dplyr::summarise(mean_count = mean(col1, na.rm = TRUE), special_count = count(1 - nrow(dplyr_data))))

这会返回以下错误:

Error: Problem with `summarise()` input `special_count`.
x no applicable method for 'group_vars' applied to an object of class "c('double', 'numeric')"
i Input `special_count` is `count(1 - nrow(dplyr_data))`.
i The error occurred in group 1: col1 = "a".
Run `rlang::last_error()` to see where the error occurred.
In addition: Warning messages:
1: In mean.default(col1, na.rm = TRUE) :
  argument is not numeric or logical: returning NA
2: In mean.default(col1, na.rm = TRUE) :
  argument is not numeric or logical: returning NA
3: In mean.default(col1, na.rm = TRUE) :
  argument is not numeric or logical: returning NA

我正在尝试获得以下输出:

col1 mean_count   special_count
1    a 0.66      3-1 = 2
2    b 0.50      2-1 = 1
3    c 0.33      3-2 = 1

基本上,“special_count” = 对于 col_1 的每个唯一组(即 a、b、c):取总行数并减去 0 的数量。

有人可以告诉我怎么做吗?

谢谢

【问题讨论】:

【参考方案1】:

您不能在summarize 中使用count(),但您可以使用带有布尔值的sum() 来计算值。 sum(col2==0) 会告诉你行数为 0,n() 给出总行数(每组)

dplyr_data %>% 
  group_by(col1) %>% 
  summarize(mean_count=mean(col2),
          special_count = n() - sum(col2==0))

【讨论】:

以上是关于在 dplyr (R) 中添加“count where”的主要内容,如果未能解决你的问题,请参考以下文章

将代码从基数R转换为dplyr,特别是添加变量

使用 dplyr 复制一列并为 R 中的新列添加前缀

R中的dplyr mutate - 添加列作为列的连接

R语言dplyr包的mutate函数将列添加到dataframe中或者修改现有的数据列:基于条件判断创建布尔型指示变量将异常离散编码转化为NA值

R语言dplyr包为dataframe添加数据列实战( Add Columns):基于mutate()函数添加一个或者多个数据列(尾部添加头部添加条件生成某个具体数据列的前后)

R语言ggplot2可视化:使用dplyr包计算每个分组个数的比例使用ggplot2可视化条形图(bar plot)并在条形图上添加百分比标签