在字母字符串内比较R中的值

在字母字符串内比较R中的值,r,if-statement,compare,R,If Statement,Compare,我需要检查两列的值是否满足某些条件,但一列中的值在一个字母字符串内 如果CURRENT_ID的值等于CURRENT_TEXT_1或CURRENT_TEXT_2的值加上2,当CURRENT_TEXT_1或CURRENT_TEXT_2等于DISPLAY_BOUNDARY时,则我需要在输出列中输入值1,否则输入值为零 以下是我的数据文件(df)的一些示例行以及我希望获得的输出: PARTICIPANT ITEM CONDITION CURRENT_TEXT_1

我需要检查两列的值是否满足某些条件,但一列中的值在一个字母字符串内

如果CURRENT_ID的值等于CURRENT_TEXT_1或CURRENT_TEXT_2的值加上2,当CURRENT_TEXT_1或CURRENT_TEXT_2等于DISPLAY_BOUNDARY时,则我需要在输出列中输入值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                    1
 ppt01          4         2            DISPLAY_BOUNDARY 2 aware     iaRegion 6 rd 0 x width 768    3                     0
 ppt01          6         3            DISPLAY_BOUNDARY 3 door      iaRegion 8 rd 0 x width 534    4                     0
 ppt01          9         4            DISPLAY_BOUNDARY 6 in        iaRegion 9 rd 0 x width 924    5                     0
 ppt01          48        5            DISPLAY_BOUNDARY 6 the       iaRegion 10 rd 0 x width 712   8                     1
 ppt02          3         4            iaRegion 14 rd 0 x width 756 DISPLAY_BOUNDARY 15 put        17                    1
 ppt02          7         5            iaRegion 1 rd 0 x width 334  DISPLAY_BOUNDARY 1 where       3                     1
 ppt02          8         6            DISPLAY_BOUNDARY 3 At        iaRegion 2 rd 0 x width 215    5                     1
 ppt02          35        2            iaRegion 3 rd 0 x width 524  DISPLAY_BOUNDARY 1 outside     2                     0
 ppt03          10        1            iaRegion 11 rd 0 x width 190 DISPLAY_BOUNDARY 2 school      4                     1
 ppt03          56        1            DISPLAY_BOUNDARY 8 blue      iaRegion 11 red 0 x width 383  9                     0
我的尝试是:

df$OUTPUT <- ifelse(df$CURRENT_ID==((grepl("DISPLAY_BOUNDARY",df$CURRENT_TEXT_1)|grepl("DISPLAY_BOUNDARY",df$CURRENT_TEXT_2))+2, 1, 0)

df$OUTPUT类似的东西,也许

#extract any relevant numeric values from ct1 and ct2
ct1 <- as.numeric(gsub("DISPLAY_BOUNDARY ([0-9]+).*","\\1",df$CURRENT_TEXT_1))  
ct2 <- as.numeric(gsub("DISPLAY_BOUNDARY ([0-9]+).*","\\1",df$CURRENT_TEXT_2))

#use mapply to check each row and return logical value as numeric
df$OUTPUT <- as.numeric(mapply(function(id,x1,x2) id %in% c(x1+2,x2+2),
                               as.numeric(df$CURRENT_ID),ct1,ct2))
#从ct1和ct2中提取任何相关数值

ct1如何将数值
当前\u ID
与字符(
当前\u TEXT\u 1
)之间的比较可视化?我的意思是,当前示例中的哪些行符合
current\u TEXT\u 1==current\u ID
?尝试使用
gsub
而不是
grepl
df$OUTPUT=ifelse((df$current\u ID==as.numeric)(gsub(“DISPLAY\u BOUNDARY(\\d+).*,“\\1”,df$current\u TEXT\u 1))-2);(df$current\u ID==as.numeric)(gsub(“DISPLAY\d+),\\1”),df$CURRENT_TEXT_2))-2),1,0)
我想在CURRENT_TEXT_1或CURRENT_TEXT_2中比较的值是显示边界后的值。您能编辑您的问题以包含数据帧的
dput
结果吗?我对函数不是很熟悉。你能解释一下为什么我们在x2上加了+2而不是x1吗?谢谢。对不起,我误解了这个问题的意思是ct1或ct2+2。如果它也是ct1+2,那么在函数中也应该是
x1+2
。我会修改答案。