假设我们有以下矩阵或数据框 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_1
和 dyad_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/