我有一个带有头部的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是从一系列向量中创建的,与类和我的尝试中的示例代码有什么不同,我只是没有看到它。希望有人能回答这个......
答案 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)