使用dplyr卡住计数值

时间:2018-08-24 10:51:00

标签: r dataframe dplyr

我在dplyr语法上苦苦挣扎,尽管我在Google上搜索了很多东西,但我还是被卡住了。我有一个包含8,594行和两个不同变量(作为因子)的数据框。现在,我想使用R中的dplyr找出一个物种出现在我的数据框中的次数。

我的数据框如下:

    dfrm <- data.frame (cod_lance= c( "1994_100","1994_100",
        "1994_100","1994_100","1994_101","1994_101","1994_101",
        "1994_120","1994_120","1994_120","1994_120","1996_10",
        "1996_10","1996_10","1996_10","1997_65","1997_65",
        "1997_65","1997_65","1997_65","1997_65","1997_66",
        "1997_66", "1997_66","1997_66"), 
         especie= c("Micromesistius poutassou","Gadiculus argenteus",
         "Merluccius merluccius","Gaidropsaurus macrophthalmus",
        "Merluccius merluccius","Micromesistius poutassou","Gadiculus argenteus",
        "Trisopterus luscus","Merluccius merluccius","Trisopterus minutus",
        "Phycis blennoides","Gadiculus argenteus","Gaidropsaurus macrophthalmus",
        "Merluccius merluccius","Micromesistius poutassou",
        "Trisopterus minutus","Phycis blennoides","Gadiculus argenteus",
       "Gaidropsaurus macrophthalmus",
       "Merluccius merluccius", "Micromesistius poutassou",
       "Nezumia aequalis","Phycis blennoides",
       "Gadiculus argenteus","Trisopterus luscus"))

我想要得到的是一个像这样的数据帧(使用上面的示例)

freq <- data.frame (especie=c("Gadiculus argenteus","Gaidropsaurus
       macrophthalmus","Merluccius merluccius","Micromesistius poutassou",
       "Nezumia aequalis","Phycis blennoides","Trisopterus luscus",
       "Trisopterus minutus"), N=c(4,3,5,4,1,3,2,2))

我尝试了几种方法,例如

df1 <- (dfrm %>% count(cientifico) %>% group_by (cod_lance))

但是我总是得到相同类型的错误。 在此示例中:“(grouped_df_impl(数据,unname(vars),drop中的错误:列cod_lance未知)” ,我既不知道自己在做什么也不对,也不知道有什么解决方案。

任何帮助都将非常受欢迎。预先感谢。

3 个答案:

答案 0 :(得分:1)

如胡安·卡洛(Juan Carlo)所示,group_bysummarize是执行此操作的经典方法(也是我通常使用的方法。)也就是说,如果您经常进行此操作,则可能在count()中使用tally()dplyr快捷键很方便。

在这种情况下,您将输入:

count(df, especie)

有关count()的更多信息,请参见:https://dplyr.tidyverse.org/reference/tally.html

这里没有关系,因为您只有一个分组变量,但是这种方法也很不错,因为它会在ungroup()之后自动调用summarize()。当group_by()包含多个分组变量时,summarize()会自然地对数据进行部分分组(除group_by中的最后一个变量以外的所有变量)。这有时会产生意外的下游后果(因为下次您尝试应用聚合函数时,仍会假定该分组。)

答案 1 :(得分:0)

使用dplyr

df %>% 
  group_by(especie) %>% 
  summarise(n = n())

# A tibble: 8 x 2
  especie                          n
  <fct>                        <int>
1 Gadiculus argenteus              5
2 Gaidropsaurus macrophthalmus     3
3 Merluccius merluccius            5
4 Micromesistius poutassou         4
5 Nezumia aequalis                 1
6 Phycis blennoides                3
7 Trisopterus luscus               2
8 Trisopterus minutus              2

答案 2 :(得分:0)

根据您的频率数据,框架dfrm %>% count(especie)返回所需的内容,与@tmfmnk的答案相同。

如果您看到错误,则dfrm %>% count(especie)的结果是2列的小标题,不再包含cod_lance。因此,您的group_by语句给您错误

  

grouped_df_impl中的错误(数据,未命名(变量),删除):列   cod_lance未知

首先需要进行分组,然后才能在一组变量中创建汇总或频率。例如,以下代码将为您提供每个cod_lance值的espiece数。

dfrm %>% 
  group_by (cod_lance) %>% 
  summarise(n = n()) # for frequencies tally() would also work.

# A tibble: 6 x 2
  cod_lance     n
  <fct>     <int>
1 1994_100      4
2 1994_101      3
3 1994_120      4
4 1996_10       4
5 1997_65       6
6 1997_66       4

顺便说一句,有关dplyr工作流程的更多信息,请参见R for Data Science第5章。