【发布时间】:2017-11-11 17:31:23
【问题描述】:
最近开始使用 datatables 包,只是在查找时遇到了一些麻烦。这是数据:
Date MonthNo Unique Items Amounts Total
1: Jan 1 AAA x 10 10
2: Jan 1 BBB y 2 0
3: Feb 2 CCC x 3 3
4: Feb 2 DDD y 15 0
5: March 3 AAA y 20 0
6: March 3 BBB x 35 35
7: April 4 CCC x 15 15
8: April 4 AAA y 50 0
9: May 5 BBB x 60 60
10: May 5 CCC y 70 0
11: June 6 DDD x 100 100
12: June 6 AAA y 20 0
基本上,我想创建一个名为 PYTD 的新列,它基本上是每个月每个 Unique 的总数,但只是上个月的总数。 例如:
Date MonthNo Unique Items Amounts Total PYTD
7: April 4 CCC x 15 3
这是我目前的代码:
Sys.setlocale("LC_CTYPE", "en_US.UTF-8")
library(data.table)
data <- read.csv("sample.csv")
df <- as.data.frame(data)
#str(df)
dt <- data.table(df)
dt
#str(dt)
dt$Total = ifelse(dt$Items == "x",dt$Amounts,0)
dtgrouped2 = dt[, lapply(.SD, sum, na.rm=TRUE), by=list(MonthNo,Unique),
.SDcol=c("Total")]
dtgrouped2$PYTD <- dtgrouped2[MonthNo == (dtgrouped2$MonthNo-1)
& Unique == dtgrouped2$Unique,Total]
但不幸的是,dtgrouped2$PYTD 只是给了我 NA。
这是我要寻找的最终结果:
MonthNo Unique Total PYTD
1: 1 AAA 10 NA
2: 1 BBB 0 NA
3: 2 CCC 3 NA
4: 2 DDD 0 NA
5: 3 AAA 0 10
6: 3 BBB 35 0
7: 4 CCC 15 3
8: 4 AAA 0 0
9: 5 BBB 60 35
10: 5 CCC 0 15
11: 6 DDD 100 0
12: 6 AAA 0 0
【问题讨论】:
-
你的意思是
dt[, PYTD := shift(Total), Unique] -
Uwe,我已编辑以显示预期结果。谢谢,阿克伦!这行得通。但是,我可能需要一种与我在项目后期提出的方法类似的方法,所以我仍然想知道是否有一种方法可以做与我需要的查找非常相似的事情。
标签: r dataframe data.table