【发布时间】:2021-04-08 20:06:03
【问题描述】:
我有一个data.frame,如下所示;
df <- data.frame(ID = c(2,3,5,8,9,10,12,13,14,15,16),
value = c(1,2,3,4,5,6,7,8,9,10,11))
> df
ID value
1 2 1
2 3 2
3 5 3
4 8 4
5 9 5
6 10 6
7 12 7
8 14 8
9 15 9
10 16 10
11 17 11
在这里,我想获取ID 连续时的中位数列表。例如,前两行中的ID 显示2,3,这是连续的。在这种情况下,我想获得前两行中value的中位数,应该是
> median(c(1,2))
[1] 1.5
那么,下一个连续的ID 是8,9,10,14,15,16,17。对应的中位数应该是
> median(c(4,5,6))
[1] 5
> median(c(8,9,10,11))
[1] 9.5
那么,我最终想要的是下面的data.frame
ID median
1 2 1.5
2 8 5
3 14 9.5
我想知道rle 可能有用,但我不确定我是如何实现它的。
你有什么建议来实施这个吗?如有任何建议,我将不胜感激。
【问题讨论】:
-
您可以创建一个分组变量,如下所述:Create grouping variable for consecutive sequences and split vector。 (不需要拆分)。然后运行您最喜欢的“按组”功能。
-
非常感谢您的评论。虽然我使用了另一个答案的方法,但是您提供的网址非常有帮助!
-
不客气!如您所见,以下答案中使用了相同的成语:
cumsum(...diff(。干杯。 -
是的,我发现了这一点!非常感谢你。真诚的。