R 基于两个标志的总和
我需要你的帮助。我有一个带有一个数字字段和两个标志的数据。 我想根据两个标志对数值字段求和。 在以下数据中: 我想计算FLAG1和FLAG2之间的和。但当FLAG2为真时,下一个FLAG1行值应为真,在任何FLAG2为真之前,FLAG1应视为假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',
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。