>我有一个 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
谢谢!
这能满足你的需求吗?
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
这也可以(这捕获任何模式(x1 中的 FP 和 x2 中的 FN)或(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