R 基于两个标志的总和

R 基于两个标志的总和,r,R,我需要你的帮助。我有一个带有一个数字字段和两个标志的数据。 我想根据两个标志对数值字段求和。 在以下数据中: 我想计算FLAG1和FLAG2之间的和。但当FLAG2为真时,下一个FLAG1行值应为真,在任何FLAG2为真之前,FLAG1应视为假 nf<-c(10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,180,190,200,210,220,230,240,250) Flag1 <- c('FALSE','FALSE',

我需要你的帮助。我有一个带有一个数字字段和两个标志的数据。 我想根据两个标志对数值字段求和。 在以下数据中: 我想计算FLAG1和FLAG2之间的和。但当FLAG2为真时,下一个FLAG1行值应为真,在任何FLAG2为真之前,FLAG1应视为假

nf<-c(10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,180,190,200,210,220,230,240,250)
Flag1 <- c('FALSE','FALSE','FALSE','FALSE','FALSE','TRUE','FALSE','FALSE','FALSE','FALSE','FALSE','TRUE','FALSE','FALSE','FALSE','FALSE','FALSE','FALSE','FALSE','TRUE','FALSE','FALSE','FALSE','FALSE','FALSE')
Flag2 <- c('FALSE','FALSE','FALSE','FALSE','FALSE','FALSE','FALSE','FALSE','TRUE','FALSE','FALSE','FALSE','FALSE','FALSE','FALSE','TRUE','FALSE','FALSE','FALSE','FALSE','FALSE','FALSE','FALSE','FALSE','TRUE')


abc <- as.data.frame(cbind(Flag1,Flag2,nf))

nf我不确定这是否是您需要的,但我认为这可能会有所帮助

首先,正如@akrun所提到的,
TRUE
FALSE
是逻辑向量,不需要作为字符串放在引号中。对于这个例子,我将它们转换为逻辑值

此解决方案使用
tidyverse
。您可以使用
lead
lag
翻转前面或后面行中的
Flag1
值。使用
slice
可以从
Flag1
中的第一个
TRUE
开始求和。使用
cumsum
可以对始终以
Flag2
TRUE
结尾的组进行编号

nf<-c(10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,210,220,230,240,250)

Flag1 <- c('FALSE','FALSE','FALSE','FALSE','FALSE','TRUE','FALSE','FALSE','FALSE','FALSE','FALSE','TRUE',
           'FALSE','FALSE','FALSE','FALSE','FALSE','FALSE','FALSE','TRUE','FALSE','FALSE','FALSE','FALSE','FALSE')
Flag2 <- c('FALSE','FALSE','FALSE','FALSE','FALSE','FALSE','FALSE','FALSE','TRUE','FALSE','FALSE','FALSE',
           'FALSE','FALSE','FALSE','TRUE','FALSE','FALSE','FALSE','FALSE','FALSE','FALSE','FALSE','FALSE','TRUE')

Flag1 <- Flag1 == 'TRUE'
Flag2 <- Flag2 == 'TRUE'

abc <- data.frame(Flag1,Flag2,nf)

library(tidyverse)

abc %>%
  mutate(Flag1 = if_else(lag(Flag2), TRUE, Flag1),
         Flag1 = if_else(lead(Flag2), FALSE, Flag1)) %>%
  slice(match(TRUE, Flag1):n()) %>%
  group_by(grp = cumsum(lag(Flag2, default = 0))) %>%
  summarise(sum = sum(nf))

# A tibble: 3 x 2
    grp   sum
  <dbl> <dbl>
1     0   300
2     1   910
3     2  1890

nf逻辑向量不需要引号,
nf
中缺少
170
——请描述在第二个标志值为真后,如何得到预期的3009101890.60+70+80+90=300100+110+120+130+140+150+160之和,firstflag下一行值应变为true,并且标志1中为true的任何后续值应变为false。