我想从一张大桌子上得到一笔累计金额。 这对我来说很难用文字解释,但我可以在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
任何人都可以帮助我找到理想的桌子。
此致 迷
答案 0 :(得分:0)
假设输入DF
与最后的注释相同,我们将Date
列转换为"Date"
类,使用xtabs
创建宽格式矩阵x
在每个Population
/ Date
单元格中Name
总结cumsum
,将a
应用于每列给出矩阵a
,然后只使用{{} 1}}或者可选地将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)