【问题标题】:Stuck counting values using dplyr [duplicate]使用 dplyr 卡住计数值 [重复]
【发布时间】:2019-01-30 20:11:56
【问题描述】:

我在 dplyr-syntax 上苦苦挣扎,虽然我在 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 中的错误(data, unname(vars), drop) : Column cod_lance is unknown)” 我不知道我做错了什么也不知道是解决方案。

非常欢迎任何帮助。提前致谢。

【问题讨论】:

    标签: r dataframe dplyr


    【解决方案1】:

    根据您的频率 data.frame dfrm %&gt;% count(especie) 返回您想要的,与@tmfmnk 的答案相同。

    如果您查看收到的错误,dfrm %&gt;% count(especie) 的结果是 2 列的 tibble,不再包含 cod_lance。因此你的 group_by 语句给你错误

    grouped_df_impl(data, unname(vars), drop) 中的错误:列 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 章中找到。

    【讨论】:

      【解决方案2】:

      正如 Juan Carlo 所示,group_bysummarize 是执行此操作的经典方法(也是我通常使用的方法)。也就是说,如果这是您经常使用的操作,您可能会发现它很方便使用dplyr 中的count()tally() 快捷方式。

      在这种情况下,你会写:

      count(df, especie)

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

      这里没关系,因为你只有一个分组变量,但这种方法也很好,因为它会在summarize() 之后自动调用ungroup()。当group_by() 包含多个分组变量时,summarize() 本机将数据部分分组(除您的group_by 中的最终变量之外的所有变量。)这有时会产生意想不到的下游后果(因为下次您尝试应用聚合时函数,它仍然会假设分组。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多