【问题标题】:Cumulative Sum with Multiple Criteria具有多个条件的累积和
【发布时间】:2016-07-12 18:06:51
【问题描述】:

我正在尝试从一张大表中获取累积总和。 这对我来说很难用语言解释,但我可以在 Excel 中轻松完成实际过程。我是 R 新手,不知道如何将我在 Excel 中的能力转化为 R。

我的原始数据示例表:

Date       Name     Valid   Population
1/4/2016    US      Yes     -100
1/4/2016    US      Yes     -1000
1/4/2016    Angola  Yes      400
1/5/2016    US      Yes      500
1/6/2016    Angola  Yes      300
1/7/2016    Japan   No      -100
1/8/2016    Japan   Yes     -500
1/8/2016    US      Yes      600
1/9/2016    Angola  Yes     -200
1/10/2016   US      Yes      800

这就是我想要的最终结果。 它应该是一个单独的数据框,具有新的列标题,并且日期列现在按顺序排列,并且只包含唯一值。

Date        US     Angola   Japan
1/4/2016    -1100   400     0
1/5/2016    -600    400     0
1/6/2016    -600    700     0
1/7/2016    -600    700     0
1/8/2016     0      700    -500
1/9/2016     0      500    -500
1/10/2016    800    500    -500

任何人都可以帮助我实现所需的表格。

真诚地, 谜语人

【问题讨论】:

    标签: r dataframe cumsum


    【解决方案1】:

    假设输入DF与最后的注释一样,我们将Date列转换为"Date"类,使用xtabs创建宽格式矩阵x和Population求和在每个Date/Name 单元格中,将cumsum 应用于给出矩阵a 的每一列,然后仅使用a 或可选地将a 转换为数据框。没有使用任何包。

    DF$Date <- as.Date(DF$Date, format = "%m/%d/%Y")
    
    x <- xtabs(Population ~ Date + Name, DF)
    a <- apply(x, 2, cumsum)
    data.frame(Date = as.Date(rownames(a)), a, row.names = NULL)
    

    给予:

            Date Angola Japan    US
    1 2016-01-04    400     0 -1100
    2 2016-01-05    400     0  -600
    3 2016-01-06    700     0  -600
    4 2016-01-07    700  -100  -600
    5 2016-01-08    700  -600     0
    6 2016-01-09    500  -600     0
    7 2016-01-10    500  -600   800
    

    注意:我们将输入DF 定义为:

    Lines <- "Date       Name     Valid   Population
    1/4/2016    US      Yes     -100
    1/4/2016    US      Yes     -1000
    1/4/2016    Angola  Yes      400
    1/5/2016    US      Yes      500
    1/6/2016    Angola  Yes      300
    1/7/2016    Japan   No      -100
    1/8/2016    Japan   Yes     -500
    1/8/2016    US      Yes      600
    1/9/2016    Angola  Yes     -200
    1/10/2016   US      Yes      800"
    
    DF <- read.table(text = Lines, header = TRUE)
    

    【讨论】:

    • 这太棒了。谢谢回复。它工作得很好。现在,它处理了我项目中最大的部分之一。我从来不知道这个 xtabs 函数。仍然不完全确定它实际上做了什么......但它有效。
    猜你喜欢
    • 1970-01-01
    • 2019-10-16
    • 2018-05-02
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 2019-10-11
    • 2022-12-05
    • 1970-01-01
    相关资源
    最近更新 更多