gpt4 book ai didi

R对连续的重复行求和并删除除第一个以外的所有行

转载 作者:行者123 更新时间:2023-12-01 15:58:57 26 4
gpt4 key购买 nike

我被一个可能很简单的问题困住了——如何对连续的重复行求和并删除除第一行以外的所有行。并且,如果在两个重复项之间有一个 NA(例如 2,na,2),也将它们相加并删除除第一个条目之外的所有条目。到目前为止一切顺利,这是我的样本数据

ia<-c(1,1,2,NA,2,1,1,1,1,2,1,2)
time<-c(4.5,2.4,3.6,1.5,1.2,4.9,6.4,4.4, 4.7, 7.3,2.3, 4.3)
a<-as.data.frame(cbind(ia, time))

示例输出

     a
ia time
1 1 4.5
2 1 2.4
3 2 3.6
4 NA 1.5
5 2 1.2
6 1 4.9
7 1 6.4
8 1 4.4
9 1 4.7
10 2 7.3
11 1 2.3
12 2 4.3

现在我想1.) 对连续 ia 的“时间”列求和 - 即,如果数字 1 连续出现两次或更多次,则对时间求和,在我的例子中,这里将列时间的第一行和第二行求和为 4.5+2.4

2.) 如果在两个相同的数字(ia 列)之间有一个 NA (即 ia = 2, NA, 2),则还要总结所有这些时间。

3.) 只保留第一次出现的 ia,并删除其余部分。

最后,我想要这样的东西:

 a
ia time
1 1 6.9
3 2 6.3
6 1 20.4
10 2 7.3
11 1 2.3
12 2 4.3

我发现这个是求和的,但是没有考虑连续因子

aggregate(time~ia,data=a,FUN=sum)

我发现这个是为了删除

a[cumsum(rle(as.numeric(a[,1]))$lengths),]

虽然 rle 方法保留最后一个条目,但我想保留第一个。我也不知道如何处理 NA

如果我有一个 1-NA-2 的模式,那么 NA 不应该与它们中的任何一个一起计算,在这种情况下 NA行应该被删除。

最佳答案

使用 data.table(如 RHertel 对 na.locf 的建议):

library(data.table)
library(zoo)

setDT(a)[na.locf(ia, fromLast=T)==na.locf(ia), sum(time), cumsum(c(T,!!diff(na.locf(ia))))]
# id V1
#1: 1 6.9
#2: 2 6.3
#3: 3 20.4
#4: 4 7.3
#5: 5 2.3
#6: 6 4.3

关于R对连续的重复行求和并删除除第一个以外的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32588433/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com