我有一个带有两列的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
谢谢!
答案 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