比较两列的字符串并打印“TRUE”或“FALSE”

时间:2017-01-10 17:54:06

标签: r compare

我有一个带有两列的df,其中包含带有误报和误报的字符串。我想比较两列并确定那些既是“FN”又是“FP”的列,并使用“标记”创建第三列,指示列是否符合查询的规范。

例如,这是一段df

x1           x2
1/2:FN:am    .:.:.
1|1:FN:am    0/1:FP:am
.:.:.        1|0:559.511:FP

我希望得到的输出为

x1           x2               x3
1/2:FN:am    .:.:.            False
1|1:FN:am    0/1:FP:am        True
.:.:.        1|0:559.511:FP   False 

谢谢!

2 个答案:

答案 0 :(得分:3)

这能满足您的需求吗?

df <- data.frame(x1=c("1:FN:AM","1.2:FN:AM","3"),x2=c("1:AM","1.2:FP:AM","3"),stringsAsFactors = FALSE)
         x1        x2
1   1:FN:AM      1:AM
2 1.2:FN:AM 1.2:FP:AM
3         3         3

df$x3 <- sapply(df$x1,grepl,pattern = "FN") & sapply(df$x2,grepl,pattern = "FP")
         x1        x2    x3
1   1:FN:AM      1:AM FALSE
2 1.2:FN:AM 1.2:FP:AM  TRUE
3         3         3 FALSE

答案 1 :(得分:1)

这也有效(这可以捕获任何模式(x2中的FP和x2中的FP)或(x1中的FN和x2中的FP))

df <- read.table(text='x1           x2
                 1/2:FN:am    .:.:.
                 1|1:FN:am    0/1:FP:am
                 1|0:55:FP    0/2:FN:am
                 .:.:.        1|0:559.511:FP', header=TRUE, stringsAsFactors=FALSE)
df$x3 <- grepl('.*FN.*FP.*|.*FP.*FN.*', paste(df$x1, df$x2))
df
#         x1             x2    x3
#1 1/2:FN:am          .:.:. FALSE
#2 1|1:FN:am      0/1:FP:am  TRUE
#3 1|0:55:FP      0/2:FN:am  TRUE
#4     .:.:. 1|0:559.511:FP FALSE