【发布时间】:2017-05-31 16:06:19
【问题描述】:
我需要检查两列的值是否满足某些条件,但一列的值在一串字母内。
如果CURRENT_ID的值等于CURRENT_TEXT_1的值或CURRENT_TEXT_2的值加2,当CURRENT_TEXT_1或 CURRENT_TEXT_2 等于 DISPLAY_BOUNDARY,那么我需要在 OUTPUT 列中的值为 1,否则值为 0。
以下是我的数据文件 (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)
但我不知道如何提取与 DISPLAY_BOUNDARY 关联的值。任何帮助将不胜感激。
【问题讨论】:
-
如何可视化数值
CURRENT_ID和字符一 (CURRENT_TEXT_1) 之间的比较?我的意思是,当前示例中的哪些行符合CURRENT_TEXT_1==CURRENT_ID? -
尝试使用
gsub代替grepl:df$OUTPUT=ifelse((df$CURRENT_ID==as.numeric(gsub("DISPLAY_BOUNDARY (\\d+).*","\\1",df$CURRENT_TEXT_1))-2) | (df$CURRENT_ID==as.numeric(gsub("DISPLAY_BOUNDARY (\\d+).*","\\1",df$CURRENT_TEXT_2))-2),1,0) -
我想在 CURRENT_TEXT_1 或 CURRENT_TEXT_2 中比较的值是 DISPLAY_BOUNDARY 之后的值。
-
您能否编辑您的问题以包含您的数据框的
dput的结果?
标签: r if-statement compare