R-如何同时使用diff()和分组?
我有一个带值的数据框R-如何同时使用diff()和分组?,r,R,我有一个带值的数据框 cust_no name trans_date amount 1122 abc 2014-03-10 2000 1122 abc 2014-03-15 300 4444 pqr 2014-01-10 1000 4444 pqr 2014-01-15 1000 4444 pqr 2014-02-15 1000 7777 xyz 2014-0
cust_no name trans_date amount
1122 abc 2014-03-10 2000
1122 abc 2014-03-15 300
4444 pqr 2014-01-10 1000
4444 pqr 2014-01-15 1000
4444 pqr 2014-02-15 1000
7777 xyz 2014-01-10 34
7777 xyz 2014-01-11 444
7777 xyz 2014-01-17 2344
7777 xyz 2014-01-30 345
我希望为同一客户计算两笔交易之间的天数差。我的输出应该是
cust_no name trans_date amount TimeDiff
1122 abc 2014-03-10 2000 0
1122 abc 2014-03-15 300 5
4444 pqr 2014-01-10 1000 0
4444 pqr 2014-01-15 1000 5
4444 pqr 2014-02-15 1000 30
7777 xyz 2014-01-10 34 0
7777 xyz 2014-01-11 444 1
7777 xyz 2014-01-17 2344 6
7777 xyz 2014-01-30 345 13
我尝试了以下代码(当然没有使用diff()
)
您可以使用
ave
或包dplyr
或data.table
按组计算
数据
df <- structure(list(cust_no = c(1122L, 1122L, 4444L, 4444L, 4444L,
7777L, 7777L, 7777L, 7777L), name = structure(c(1L, 1L, 2L, 2L,
2L, 3L, 3L, 3L, 3L), .Label = c("abc", "pqr", "xyz"), class = "factor"),
trans_date = structure(c(16139, 16144, 16080, 16085, 16116,
16080, 16081, 16087, 16100), class = "Date"), amount = c(2000L,
300L, 1000L, 1000L, 1000L, 34L, 444L, 2344L, 345L)), .Names = c("cust_no",
"name", "trans_date", "amount"), row.names = c(NA, -9L), class = "data.frame")
data.table解决方案
require(dplyr)
df %>% group_by(cust_no) %>% mutate(time_diff = c(0, diff(trans_date)))
require(data.table)
setDT(df)[, time_diff :=c(0, diff(trans_date)), by=cust_no][]
您可以使用
ave
或包dplyr
或data.table
按组计算
数据
df <- structure(list(cust_no = c(1122L, 1122L, 4444L, 4444L, 4444L,
7777L, 7777L, 7777L, 7777L), name = structure(c(1L, 1L, 2L, 2L,
2L, 3L, 3L, 3L, 3L), .Label = c("abc", "pqr", "xyz"), class = "factor"),
trans_date = structure(c(16139, 16144, 16080, 16085, 16116,
16080, 16081, 16087, 16100), class = "Date"), amount = c(2000L,
300L, 1000L, 1000L, 1000L, 34L, 444L, 2344L, 345L)), .Names = c("cust_no",
"name", "trans_date", "amount"), row.names = c(NA, -9L), class = "data.frame")
data.table解决方案
require(dplyr)
df %>% group_by(cust_no) %>% mutate(time_diff = c(0, diff(trans_date)))
require(data.table)
setDT(df)[, time_diff :=c(0, diff(trans_date)), by=cust_no][]
您可以使用
ave
或包dplyr
或data.table
按组计算
数据
df <- structure(list(cust_no = c(1122L, 1122L, 4444L, 4444L, 4444L,
7777L, 7777L, 7777L, 7777L), name = structure(c(1L, 1L, 2L, 2L,
2L, 3L, 3L, 3L, 3L), .Label = c("abc", "pqr", "xyz"), class = "factor"),
trans_date = structure(c(16139, 16144, 16080, 16085, 16116,
16080, 16081, 16087, 16100), class = "Date"), amount = c(2000L,
300L, 1000L, 1000L, 1000L, 34L, 444L, 2344L, 345L)), .Names = c("cust_no",
"name", "trans_date", "amount"), row.names = c(NA, -9L), class = "data.frame")
data.table解决方案
require(dplyr)
df %>% group_by(cust_no) %>% mutate(time_diff = c(0, diff(trans_date)))
require(data.table)
setDT(df)[, time_diff :=c(0, diff(trans_date)), by=cust_no][]
您可以使用
ave
或包dplyr
或data.table
按组计算
数据
df <- structure(list(cust_no = c(1122L, 1122L, 4444L, 4444L, 4444L,
7777L, 7777L, 7777L, 7777L), name = structure(c(1L, 1L, 2L, 2L,
2L, 3L, 3L, 3L, 3L), .Label = c("abc", "pqr", "xyz"), class = "factor"),
trans_date = structure(c(16139, 16144, 16080, 16085, 16116,
16080, 16081, 16087, 16100), class = "Date"), amount = c(2000L,
300L, 1000L, 1000L, 1000L, 34L, 444L, 2344L, 345L)), .Names = c("cust_no",
"name", "trans_date", "amount"), row.names = c(NA, -9L), class = "data.frame")
data.table解决方案
require(dplyr)
df %>% group_by(cust_no) %>% mutate(time_diff = c(0, diff(trans_date)))
require(data.table)
setDT(df)[, time_diff :=c(0, diff(trans_date)), by=cust_no][]
哪一列提到了客户?抱歉。我编辑的问题的列名
transaction\u date
与所需输入不匹配,并且output@DavidArenburg你的解决方案确实奏效了!!你为什么要删除它?请重新发布。因为@shadow发布了相同的解决方案,也添加了一个dplyr
1,所以不需要在两个完全相同的解决方案中添加哪个列引用了客户?抱歉。我编辑的问题的列名transaction\u date
与所需输入不匹配,并且output@DavidArenburg你的解决方案确实奏效了!!你为什么要删除它?请重新发布。因为@shadow发布了相同的解决方案,也添加了一个dplyr
1,所以不需要在两个完全相同的解决方案中添加哪个列引用了客户?抱歉。我编辑的问题的列名transaction\u date
与所需输入不匹配,并且output@DavidArenburg你的解决方案确实奏效了!!你为什么要删除它?请重新发布。因为@shadow发布了相同的解决方案,也添加了一个dplyr
1,所以不需要在两个完全相同的解决方案中添加哪个列引用了客户?抱歉。我编辑的问题的列名transaction\u date
与所需输入不匹配,并且output@DavidArenburg你的解决方案确实奏效了!!你为什么要删除它?请重新发布。因为@shadow发布了相同的解决方案,也添加了一个dplyr
1,所以不需要两个完全相同的解决方案。对于没有提供列名,我深表歉意。我用专栏编辑了这个问题names@shadow您还可以在ave
@shadow中包含base R选项。我使用的df$TimeDIff@akrun实际上是因为我错误地使用了ave
df$TimeDIff@sunitprasad1我想这是因为修改了不提供列名的策略而解决的。我用专栏编辑了这个问题names@shadow您还可以在ave
@shadow中包含base R选项。我使用的df$TimeDIff@akrun实际上是因为我错误地使用了ave
df$TimeDIff@sunitprasad1我想这是因为修改了不提供列名的策略而解决的。我用专栏编辑了这个问题names@shadow您还可以在ave
@shadow中包含base R选项。我使用的df$TimeDIff@akrun实际上是因为我错误地使用了ave
df$TimeDIff@sunitprasad1我想这是因为修改了不提供列名的策略而解决的。我用专栏编辑了这个问题names@shadow您还可以在ave
@shadow中包含base R选项。我使用的df$TimeDIff@akrun实际上是因为我错误地使用了ave
<代码>df$TimeDIff@sunitprasad1我想它通过修改得到了解决