我陷入一个问题-如何求和连续重复的奇数行,并删除除第一行外的所有行。我已经知道如何对连续重复的行求和并删除除第一行以外的所有行(链接:https://stackoverflow.com/a/32588960/11323232)。但是对于这个项目,我想对连续重复的奇数行求和,但不是对所有连续重复的行求和。

 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
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

to

 a
   ia time
1   1  6.9
3   2  3.6
5   2  1.2
6   1  20.4
10  2  7.3
11  1  2.3
12  2  4.3

如何为我的目标编辑以下代码以求和连续重复的奇数行并删除除第一行外的所有行?
 result <- a %>%
 filter(na.locf(ia) == na.locf(ia, fromLast = TRUE)) %>%
 mutate(ia = na.locf(ia)) %>%
 mutate(change = ia != lag(ia, default = FALSE)) %>%
 group_by(group = cumsum(change), ia) %>%
 # this part
 summarise(time = sum(time))

最佳答案

您可以尝试使用data.table以下内容:

library(data.table)
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 <- data.table(ia, time)
a[, sum(time), by=.(ia, rleid(!ia %% 2 == 0))]


##   ia rleid   V1
##1:  1     1  6.9
##2:  2     2  3.6
##3: NA     3  1.5
##4:  2     4  1.2
##5:  1     5 20.4
##6:  2     6  7.3
##7:  1     7  2.3
##8:  2     8  4.3

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

10-12 19:16