【问题标题】:Group by and Pivot table in RR中的分组和数据透视表
【发布时间】:2020-03-20 16:49:07
【问题描述】:

我刚刚开始学习 R 并将项目从 Jupyter Notebook 转换为 R Markdown 文档。我有一个如下所示的数据集:

   DATE    | ROUTE | STOP_NAME   | BOARDING
-----------------------------------------------
2020-03-09 |  1    | STOP A      |  2
2020-03-09 |  1    | STOP B      |  3
2020-03-09 |  2    | STOP C      |  1

几天内共有 20,xxx 条记录和 16 条路线。我正在尝试按DATEROUTE 分组并对BOARDING 列求和。我能够在 Python 中使用

df.groupby(['DATE','ROUTE'],as_index = False)['BOARDING'].sum().pivot('DATE','ROUTE').fillna(0)

我已经能够在 R 中创建一个接近我想要使用的表:

groupcol1 <- c("DATE","ROUTE")
datacol1 <- ("BOARDING")
route_totals_table <- ddply(df,groupcol1,function(x) colSums(x[datacol1]))

但这给了我一个表格,每个日期和路线都有一行。我想要一张这样的桌子。

   DATE    | ROUTE 1 | Route 2  | Route 3
-----------------------------------------------
2020-03-09 |   25    | 45       |  10
2020-03-10 |   36    | 69       |  22
2020-03-11 |   95    | 100      |  29

【问题讨论】:

    标签: r pivot plyr


    【解决方案1】:

    我建议使用 tidyverse 包来完成这项工作,并使用 tidyr 包中的 spreadpivot_wider 函数。假设您的数据位于名为“dat”的 data.frame 中:

    library(tidyverse)
    # using spread
    dat %>%
        mutate(ROUTE = paste0("Route ", ROUTE)) %>%
        group_by(DATE, ROUTE)%>%
        summarise(BOARDING = sum(BOARDING)) %>%
        spread(ROUTE, BOARDING)
    # using pivot_wider
    dat %>%
        mutate(ROUTE = paste0("Route ", ROUTE)) %>%
        group_by(DATE, ROUTE)%>%
        summarise(BOARDING = sum(BOARDING)) %>%
        pivot_wider(names_from = ROUTE, values_from = BOARDING)
    

    两者都返回:

      DATE          `Route 1` `Route 2`
      <chr>             <int>     <int>
    1 "2020-03-09"          5         1
    

    【讨论】:

    • 感谢您的快速回复。我想说这行得通,但现在我收到一个错误,即“ROUTE”列不存在。我可以使用df$ROUTE 调用该列,它显示得很好。
    • 列名中可能有空格吗?
    • 我已经仔细检查过,没有空格。我检查了 .csv 文件并使用了colnames(df)。我在原始问题中编写的代码使用路由列并运行但不返回所需的输出,但我在列名周围加上了引号。你不需要R中的引号吗?
    • 对于这个例子,你有列名,你不应该需要引号。
    • 感谢您的帮助。我会尝试解决不存在的列问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    相关资源
    最近更新 更多