这是上一篇文章的后续内容:compare values in R when within a string of letters
我需要检查 CURRENT_ID 的值是否等于或等于 CURRENT_TEXT_1 或 CURRENT_TEXT_2 的值,当 CURRENT_TEXT_1 或 CURRENT_TEXT_2 等于DISPLAY_BOUNDARY。如果是,那么我需要在 OUTPUT 列中输入值1,否则值为零。
以下是我的数据文件( df )的一些示例行以及我想要获得的输出:
PARTICIPANT ITEM CONDITION CURRENT_TEXT_1 CURRENT_TEXT_2 CURRENT_ID OUTPUT
ppt01 1 1 DISPLAY_BOUNDARY 1 the iaRegion 4 rd 0 x width 333 7 0
ppt01 3 1 iaRegion 2 rd 0 x width 1 DISPLAY_BOUNDARY 9 a 11 0
ppt01 4 2 DISPLAY_BOUNDARY 2 aware iaRegion 6 rd 0 x width 768 3 1
ppt01 6 3 DISPLAY_BOUNDARY 3 door iaRegion 8 rd 0 x width 534 4 1
ppt01 9 4 DISPLAY_BOUNDARY 6 in iaRegion 9 rd 0 x width 924 5 1
ppt01 48 5 DISPLAY_BOUNDARY 6 the iaRegion 10 rd 0 x width 712 8 0
ppt02 3 4 iaRegion 14 rd 0 x width 756 DISPLAY_BOUNDARY 15 put 17 0
ppt02 7 5 iaRegion 1 rd 0 x width 334 DISPLAY_BOUNDARY 1 where 3 0
ppt02 8 6 DISPLAY_BOUNDARY 3 At iaRegion 2 rd 0 x width 215 5 0
ppt02 35 2 iaRegion 3 rd 0 x width 524 DISPLAY_BOUNDARY 1 outside 2 1
ppt03 10 1 iaRegion 11 rd 0 x width 190 DISPLAY_BOUNDARY 2 school 4 0
ppt03 56 1 DISPLAY_BOUNDARY 8 blue iaRegion 11 red 0 x width 383 9 1
这样做是否正确:
ct3 <- as.numeric(gsub("DISPLAY_BOUNDARY ([0-9]+).*","\\1",df$CURRENT_TEXT_1))
ct4 <- as.numeric(gsub("DISPLAY_BOUNDARY ([0-9]+).*","\\1",df$CURRENT_TEXT_2))
df$OUTPUT <- as.numeric(mapply(function(id,x1,x2,x3,x4) id %in% c(x1+1,x2+1,x1,x2), as.numeric(df$CURRENT_ID),ct3,ct4,ct3,ct4))
如果我需要输入x3和x4,我不确定function(id,x1,x2,x3,x4)
,如果我需要写两次ct3和ct4,我不确定,ct3,ct4,ct3,ct4)
。