计算R中的分组数 - 抛出错误 - 不是向量?

时间:2017-02-22 13:55:06

标签: r dplyr

我有一个带有头部的data.frame,如下所示:

> head(movies_by_yr)

Source: local data frame [6 x 4]
Groups: YR_Released [6]

               Movie_Title YR_Released Rating Num_Reviews
                <fctr>      <fctr>  <dbl>       <int>
1 The Shawshank Redemption        1994    9.2     1773755
2            The Godfather        1972    9.2     1211083
3   The Godfather: Part II        1974    9.0      832342
4          The Dark Knight        2008    8.9     1755341
5             12 Angry Men        1957    8.9      477276
6         Schindler's List        1993    8.9      909358

请注意,在创建时,我指定了stringsAsFactors=FALSE,所以我相信当我将数据框分组以准备下一步时,转换为因子的列会被转换:

movies_by_yr <- group_by(problem1_data, YR_Released)

现在我们来解决这个问题。目标是按YR_Released分组,这样我们就可以按年获得记录数。我认为下一步将是这样的,但它会引发错误,我不确定我做错了什么:

summarise(movies_by_yr, total = nrow(YR_Released))

我选择nrow,因为一旦进行了分组,该分组中的行数应该是计数。有人能指出我做错了吗?

抛出的错误是:

Error in summarise_impl(.data, dots) : Not a vector

但是我知道这个data.frame是从一系列向量中创建的,与类和我的尝试中的示例代码有什么不同,我只是没有看到它。希望有人能回答这个......

1 个答案:

答案 0 :(得分:1)

让我们使用每个人都拥有的数据,比如内置的mtcars data.frame,让这对未来的读者更有用。

如果查看文档?nrow,您会看到该函数是在data.frame或matrix上调用的。您在列YR_Released上调用它。函数nrow有一个特定于矢量的变体,称为(混淆)NROW - 如果您尝试这样做,它可能会起作用。

但是,即使它确实如此,计算行的dplyr方法也是n(),如下所示:

mycars <- mtcars
mycars <- group_by(mycars, cyl)
summarise(mycars, total = NROW(cyl))
#> # A tibble: 3 x 2
#>     cyl total
#>   <dbl> <int>
#> 1     4    11
#> 2     6     7
#> 3     8    14

因为它是一个常见的用例,包装函数count()将为您节省一些代码:

mtcars %>%
  count(cyl)