R求和两列,条件为第三列



我有一个数据帧,如:

user_name started_at          session_time_min    task_completed timediff
ABC       2018-03-02 18:00:00                1                 3       NA
ABC       2018-03-02 19:00:00             1036                18        1
ABC       2018-03-03 12:00:00                6                10       17
ABC       2018-03-04 21:00:00                0                 1       33
ABC       2018-03-05 16:00:00              143                61       19
ABC       2018-03-05 18:00:00               12                18        2
ABC       2018-03-05 19:00:00               60                94        1
ABC       2018-03-05 20:00:00               20                46        1
ABC       2018-03-09 15:00:00                0                 1       91

如果timediff=1 ,我想将session_time_min和task_completed与前一行相加

想要输出类似:

user_name started_at          session_time_min    task_completed 
ABC       2018-03-02 18:00:00             1037                21       
ABC       2018-03-03 12:00:00                6                10       
ABC       2018-03-04 21:00:00                0                 1       
ABC       2018-03-05 16:00:00              143                61       
ABC       2018-03-05 18:00:00               92               158        
ABC       2018-03-09 15:00:00                0                 1       

任何帮助都会得到高度重视。

您可以使用for循环来帮助您,特别是如果您想使用基本R。

for (i in 1:nrow(data)) {
if (is.na(data[i,5])){
data[i+1,3] <- data[i+1,3] + data[i,3]
data[i+1,4] <- data[i+1,4] + data[i,4]
} else {}
}
data <-  na.omit(data)

此代码贯穿数据帧中的每一行,并检查第5列(timediff(中的值是否为NA。如果是NA,它会将其添加到下面的行(将是i+1(

使用cumsum制作一个组计数器,然后使用它来子集标识符列和rowsum值列:

grp <- cumsum(!dat$timediff %in% 1)
#[1] 1 1 2 3 4 5 5 5 6
cbind(
dat[match(unique(grp), grp), c("user_name","started_at")],
rowsum(dat[c("session_time_min","task_completed")], grp)
)
#  user_name         started_at session_time_min task_completed
#1       ABC 2018-03-0218:00:00             1037             21
#3       ABC 2018-03-0312:00:00                6             10
#4       ABC 2018-03-0421:00:00                0              1
#5       ABC 2018-03-0516:00:00              143             61
#6       ABC 2018-03-0518:00:00               92            158
#9       ABC 2018-03-0915:00:00                0              1

最新更新