具有多个条件的累积和

Cumulative Sum with Multiple Criteria

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

我的原始数据示例 table:

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

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

真诚的, 谜语人

假设输入DF如末尾注释,我们将Date列转换为"Date"class,使用xtabs要在每个 Date/Name 单元格中创建具有 Population 总和的宽格式矩阵 x,请将 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)