首页 > 解决方案 > 为什么 'nrow()' 函数似乎在 'summarise()' 函数中不起作用?

问题描述

请参阅以下代码:

library(dslabs)
data(gapminder)
gapminder %>%
  filter(year %in% c(2010, 2015) & !is.na(population)) %>%
  group_by(year) %>%
  summarise(weight = nrow(population))

为什么它给我一个错误:“ Column weightis of unsupported type NULL ”?

nrow()接受向量作为参数,这里population是函数内部的向量summarise()。所以,我想知道为什么它不起作用?

注意:我知道nrow()这里的替代方案,我不是在寻找可行的替代代码。我的问题是概念性的,特别与“为什么”有关。

标签: r

解决方案


因为您要传递nrow给列名,即NULL. 参见例如:

nrow(mtcars$mpg)
#NULL

nrow接受数据框而不是向量:

nrow(mtcars)
#[1] 32

但是,还有一个NROW接受向量的函数,因此您可以在这里使用它:

library(dplyr)

gapminder %>%
  filter(year %in% c(2010, 2015) & !is.na(population)) %>%
  group_by(year) %>%
  summarise(weight = NROW(population))

但是,如果您正在使用dplyr并且想要计算每个组中的行数,那么dplyr生态系统中有一些专门的功能,例如:

gapminder %>%
  filter(year %in% c(2010, 2015) & !is.na(population)) %>%
  group_by(year) %>%
  summarise(weight =n())

# A tibble: 2 x 2
#   year weight
#  <int>  <int>
#1  2010    185
#2  2015    185

或与count

gapminder %>%
  filter(year %in% c(2010, 2015) & !is.na(population)) %>%
  count(year)

推荐阅读