我有一个数据集,包括活动a,b和c,如下所示;
User-ID Date Activity Number of activity
1 03.04.2014 a 3
1 04.04.2014 c 2
2 05.06.2014 a 3
1 12.06.2014 b 2
1 06.10.2014 b 1
3 10.11.2014 a 3
1 05.11.2014 c 2
1 06.12.2014 a 1
2 06.12.2014 b 3
2 07.12.2014 a 4
2 07.12.2014 c 2
2 08.12.2014 a 1
3 08.12.2014 b 3
我想编写一个代码,显示自上次活动a
以来每个用户的活动总数c
和b
。例如;用户ID:1有活动" a"和" c&#34 ;;活动b
后共计3次。
如何计算指定因子后的活动数量? (在这里:自上次" b")
预期结果: 用户ID:1总活动:3 用户ID:2总活动:7 用户ID:3总活动:0
答案 0 :(得分:0)
首先,尽量不要使用包含空格或连字符的变量名,除非你想遇到各种各样的问题。
df <- read.table(text='
User.ID Date Activity Number.of.activity
1 03.04.2014 a 3
1 04.04.2014 c 2
2 05.06.2014 a 3
1 12.06.2014 b 2
1 06.10.2014 b 1
3 10.11.2014 a 3
1 05.11.2014 c 2
1 06.12.2014 a 1
', header=T)
其次,如果您使用日期,则使用适当的数据类型以便进行比较非常重要。
df$Date <- as.Date(as.character(df$Date), format='%d.%m.%Y')
现在,您可以为最后一个'b'获取除'b'之外的其他活动的数量:
sapply(split(df, df$User.ID), function(x)
sum((x$Date > tail(sort(x$Date[x$Activity == 'b']), 1)) &
(x$Activity != 'b')))
#1 2 3
#2 0 0