我有一个非常大的数据集,看起来简化如下:
row. member_id entry_id comment_count timestamp
1 1 a 4 2008-06-09 12:41:00
2 1 b 1 2008-07-14 18:41:00
3 1 c 3 2008-07-17 15:40:00
4 2 d 12 2008-06-09 12:41:00
5 2 e 50 2008-09-18 10:22:00
6 3 f 0 2008-10-03 13:36:00
我现在想要创建一个新列,其中我总结了所有" commen_count"以前的想法(" ID")来自同一个成员。所以我只想总结在当前条目之前发生的被委托的comment_counts。我可以通过成员ID和时间戳来订购我的数据集。
结果应如下所示:
row. member_id entry_id comments_count timestamp aggregated_count
1 1 a 4 2008-06-09 12:41:00 4
2 1 b 1 2008-07-14 18:41:00 5
3 1 c 3 2008-07-17 15:40:00 8
4 2 d 12 2008-06-09 12:41:00 12
5 2 e 50 2008-09-18 10:22:00 62
6 3 f 0 2008-10-03 13:36:00 0
有些想法我怎么能在R(或Stata)中做到这一点?我尝试了聚合,但我不明白如何只在当前时间戳之前加上comment_counts,而只是那些与当前member_id相加的那些。
答案 0 :(得分:2)
试试这个(假设df
是你的数据)
transform(df, aggregated_count = ave(comments_count, member_id, FUN = cumsum))
# member_id entry_id comments_count timestamp aggregated_count
# 1 1 a 4 2008-06-09 12:41:00 4
# 2 1 b 1 2008-07-14 18:41:00 5
# 3 1 c 3 2008-07-17 15:40:00 8
# 4 2 d 12 2008-06-09 12:41:00 12
# 5 2 e 50 2008-09-18 10:22:00 62
# 6 3 f 0 2008-10-03 13:36:00 0
其他一些方法(为提高效率而引入):
library(data.table)
setDT(df)[, aggregated_count := cumsum(comments_count), member_id]
或者
library(dplyr)
df %>%
group_by(member_id) %>%
mutate(aggregated_count = cumsum(comments_count))
答案 1 :(得分:2)
Stata:
clear
set more off
*----- example data -----
input ///
row member_id str1 entry_id comment_count str30 timestamp
1 1 a 4 2008-06-09 12:41:00
2 1 b 1 2008-07-14 18:41:00
3 1 c 3 2008-07-17 15:40:00
4 2 d 12 2008-06-09 12:41:00
5 2 e 50 2008-09-18 10:22:00
6 3 f 0 2008-10-03 13:36:00
end
list
*----- what you want -----
bysort member_id: gen s = sum(comment_count)
list
这只涉及使用by:
前缀。