繁体   English   中英

如果列的第二行与 r 中的值匹配,则创建新变量

[英]Create new variable if second row of a column matches a value in r

我想创建一个新变量A_row_error ,如果first_A_row = TRUE并且下一行的消息 = ERROR (如果A_row_error = TRUE时的下一行是任何其他消息,则为 FALSE)。 请注意,下一行由时间戳确定,并且必须按升序排列。 A_row_error的 TRUE 消息也必须与first_A_row = TRUE位于同一行(有关所需输出,请参见下表)。

样本数据集:

participant_id <- c("ps1", "ps1", "ps1", "ps1", "ps2", "ps2", "ps3", "ps3", "ps3", "ps3")
timestamp <- c(0.01, 0.02, 0.03, 0.04, 0.01, 0.02, 0.01, 0.02, 0.03, 0.04)
event <- c("A", "A", "A", "B", "B", "A", "A", "A", "B", "A")
first_A_row <- c("TRUE", "FALSE", "FALSE", "FALSE", "FALSE", "TRUE", "TRUE", "FALSE", "FALSE", "FALSE")
message <- c("ACCEPTED", "ERROR", "DECLINED", "ACCEPTED", "HELLO", "BYE", "ACCEPTED", "BYE", "ERROR", "ACCEPTED")
data.frame(participant_id, timestamp, event, first_A_row, message)

所需的 output:

参与者ID 时间戳 事件 first_A_row 信息 A_row_error
ps1 0.01 一个 真的 公认 真的
ps1 0.02 一个 错误的 错误 错误的
ps1 0.03 一个 错误的 拒绝 错误的
ps1 0.04 错误的 公认 错误的
ps2 0.01 错误的 你好 错误的
ps2 0.02 一个 真的 再见 错误的
ps3 0.01 一个 真的 公认 错误的
ps3 0.02 一个 错误的 再见 错误的
ps3 0.03 错误的 错误 错误的
ps3 0.04 一个 错误的 公认 错误的

我们可以通过“participant_id”进行分组,并使用“message”的lead来创建逻辑,即如果下一个值为“ERROR”并且“first_A_row”的给定行为 TRUE(列first_A_row被创建为字符而不是逻辑 - 所以它被转换为as.logical

library(dplyr)
df1 %>% 
   group_by(participant_id) %>%
   mutate(A_row_error = lead(message, default = last(message)) == 
        'ERROR' & as.logical(first_A_row)) %>%
   ungroup

-输出

# A tibble: 10 × 6
   participant_id timestamp event first_A_row message  A_row_error
   <chr>              <dbl> <chr> <chr>       <chr>    <lgl>      
 1 ps1                 0.01 A     TRUE        ACCEPTED TRUE       
 2 ps1                 0.02 A     FALSE       ERROR    FALSE      
 3 ps1                 0.03 A     FALSE       DECLINED FALSE      
 4 ps1                 0.04 B     FALSE       ACCEPTED FALSE      
 5 ps2                 0.01 B     FALSE       HELLO    FALSE      
 6 ps2                 0.02 A     TRUE        BYE      FALSE      
 7 ps3                 0.01 A     TRUE        ACCEPTED FALSE      
 8 ps3                 0.02 A     FALSE       BYE      FALSE      
 9 ps3                 0.03 B     FALSE       ERROR    FALSE      
10 ps3                 0.04 A     FALSE       ACCEPTED FALSE      

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM