提取R中的不匹配列表
Extract list of non-matches in R
所以我有两个数据框,都有一列代表与 DNA 序列相关联的 ID 号,另一列有 DNA 序列。我的两个数据框要么是原始数据,要么是经过过滤以仅包含原始数据子集的数据。我现在感兴趣的是生成原始数据框中所有序列的 .csv,这些序列与过滤后的数据框中的内容不匹配。
因此,作为目标示例,我将在此处定义几个包含两列(col1 和 col2)的数据框:
col1a<-c(1,2,3,4,5,6)
col2a<-c("a","t","a","t","a","g")
col1b<-c(1,3,5,6)
col2b<-c("a","a","a","g")
df1<-data.frame(col1a,col2a)
df2<-data.frame(col1b,col2b)
我的输出想要成为第三个数据帧 (df3):
col1c <- c(2,4)
col2c <- c("t","t")
df3 <- data.frame(col1c,col2c)
我知道我可以使用 %in%。我能做到这一点:
IN <- sum(df1$col1a %in% df2$col1b) #Output = 4
NOTIN <- sum(!df1$col1a %in% df2$col1b) #Output = 2
所以现在我正在寻找一种方法来导出从 "NOTIN" 引用的行,这样它们就可以写成 table。我想生成我之前称为 df3 的示例数据框作为我的输出。
非常感谢任何帮助或建议:)
如果df1包含df2中的所有条目,就这么简单
df1[!df1$col1a %in% df2$col1b, ]
您可以使用 anti_join
:
library(dplyr)
anti_join(df1, df2, by = c("col1a" = "col1b"))
您也可以在 data.table
中执行此操作:
library(data.table)
df1 <- data.table(df1, key = col1a)
df2 <- data.table(df2, key = col1b)
df1[!df2]
使用 1.9.5 版(在 GithHub 上,尚未在 CRAN 上),您可以使用 on =
语法而不是设置密钥:
df1[!df2, on = c(col1a = "col1b")]
所以我有两个数据框,都有一列代表与 DNA 序列相关联的 ID 号,另一列有 DNA 序列。我的两个数据框要么是原始数据,要么是经过过滤以仅包含原始数据子集的数据。我现在感兴趣的是生成原始数据框中所有序列的 .csv,这些序列与过滤后的数据框中的内容不匹配。
因此,作为目标示例,我将在此处定义几个包含两列(col1 和 col2)的数据框:
col1a<-c(1,2,3,4,5,6)
col2a<-c("a","t","a","t","a","g")
col1b<-c(1,3,5,6)
col2b<-c("a","a","a","g")
df1<-data.frame(col1a,col2a)
df2<-data.frame(col1b,col2b)
我的输出想要成为第三个数据帧 (df3):
col1c <- c(2,4)
col2c <- c("t","t")
df3 <- data.frame(col1c,col2c)
我知道我可以使用 %in%。我能做到这一点:
IN <- sum(df1$col1a %in% df2$col1b) #Output = 4
NOTIN <- sum(!df1$col1a %in% df2$col1b) #Output = 2
所以现在我正在寻找一种方法来导出从 "NOTIN" 引用的行,这样它们就可以写成 table。我想生成我之前称为 df3 的示例数据框作为我的输出。
非常感谢任何帮助或建议:)
如果df1包含df2中的所有条目,就这么简单
df1[!df1$col1a %in% df2$col1b, ]
您可以使用 anti_join
:
library(dplyr)
anti_join(df1, df2, by = c("col1a" = "col1b"))
您也可以在 data.table
中执行此操作:
library(data.table)
df1 <- data.table(df1, key = col1a)
df2 <- data.table(df2, key = col1b)
df1[!df2]
使用 1.9.5 版(在 GithHub 上,尚未在 CRAN 上),您可以使用 on =
语法而不是设置密钥:
df1[!df2, on = c(col1a = "col1b")]