r - 在两个矩阵/数据帧中找到相同的行,然后在R中的矩阵/数据帧之一中删除

标签 r

假设我们有以下矩阵或数据框 dyad_1 和 dyad_2:

dyads_0 <- gtools::permutations(n=16,v=c(1:16), r=2)

dyad_1<- NULL

for (i in c(1,3:16)){

dyads1 <-NULL
dyads1 <- gtools::permutations(n=4,v=c(i,17:19), r=2)
dyad_1 <- rbind(dyad_1,dyads1[-c(5,6,8,9,11,12),]) 
}

dyad_1<- rbind(dyads_0,dyad_1) 
dyad_2<- gtools::permutations(n=19,v=c(1:19), r=2)

现在很明显 dyad_1 是 dyad_2 的子集。 我想删除 dyad_2 中与 dyad_1 类似的那些行。换句话说,我想从 dyad_2 中提取 dyad_1。您能否告诉我是否有有效的方法可以做到这一点?谢谢!

更新: 概括这一点对我来说也非常重要: 也就是说,现在假设我们有 dyad_2 有四列:

 dyad_2$V0 <- rep(0, nrow(dyad_2)) 
 dyad_2$V0 [120] <- 1 
 dyad_2$V4 <- rnorm(nrow(dyad_2)) . 

现在我的目标是删除 dyad_2 的完整行,其 V1 和 V2 列中的元素与 dyad_1 中的行相同。

作为澄清,一个简单的示例如下:

假设 dyad_2 是

V0  V1  V2 V4
0   1   2  0.1
0   1   3  0.2
1   2   1  0.15 
0   2   3  0.001
0   3   1   0
0   3   2   0.1
0   10  5   0.9

假设 dyad_1 是

V1 V2
1  2
2  3
3  2
10 5

输出应如下所示:

 V0  V1  V2  V4
 0   1   3  0.2
 1   2   1  0.15 
 0   3   1   0

这只是一个澄清示例,与上述代码不同。

如果您能给我解决方案,我将非常感激,因为我已经陷入困境。

最佳答案

您可以按行粘贴 dyad_1dyad_2 中的值,并保留未包含的行。

val1 <- apply(dyad_1, 1, paste0, collapse = '-')
val2 <- apply(dyad_2, 1, paste0, collapse = '-')
result <- dyad_2[!val2 %in% val1, ]

我们还可以将此方法应用于特定列而不是所有列。

val1 <- apply(dyad_1, 1, paste0, collapse = '-')
val2 <- apply(dyad_2[, colnames(dyad_1)], 1, paste0, collapse = '-')
dyad_2[!val2 %in% val1, ]

#  V0 V1 V2   V4
#2  0  1  3 0.20
#3  1  2  1 0.15
#5  0  3  1 0.00

关于r - 在两个矩阵/数据帧中找到相同的行,然后在R中的矩阵/数据帧之一中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67221426/

相关文章:

r - jsonlite 和 rjson 包之间的根本区别是什么?

r - 根据条件修改数据框中的字符串名称

r - 在数据帧中保留具有定义数量的 NA 的行

r - 有没有办法识别我的代码中的错误

r - 在 R 中绘制 3x3 方格

r - 如何在R中将时差转换为分钟?

r - `bookdown`/`rmarkdown`/`knitr` : Non-code sequential processing howto?

r - 缩放数据行

r - 删除表 R 中的行后更新数据框

r - R (likert) 包的问题