【发布时间】:2015-12-11 20:23:36
【问题描述】:
我遇到了一个可能很简单的问题——如何对连续的重复行求和并删除除第一行之外的所有行。并且,如果在两个重复项之间存在 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,它们是相同的(i.e., 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 方法保留了最后一个条目,但我想保留第一个条目。我也不知道如何处理NAs。
如果我有1-NA-2 的模式,那么NA 不应该被计算在内,在这种情况下应该删除NA 行。
【问题讨论】:
-
如果你有
1-NA-2的模式呢? NA 应该计为 1、2 还是两者都不计?另外,是否连续有多个 NA? -
如果我有 1-NA-2 的模式,那么 NA 不应该与它们中的任何一个一起计算,在这种情况下应该删除 NA。是的,连续也可能有多个 NA。
-
澄清一下:当我说连续不止一个 NA 时,我的意思是连续不止一个 NA。例如,是否有可能在序列中有
1 NA NA 1?在这种情况下,NA应该算作1吗? -
有可能依次出现
1 NA NA NA 1。在这种情况下,NA 应计为 1。 -
太棒了。我在下面的回答(以及Colonel Beauvel's)处理这个
标签: r dataframe duplicates na