gpt4 book ai didi

r - 是否有跨多列的 %in% 运算符

转载 作者:行者123 更新时间:2023-12-01 09:25:57 25 4
gpt4 key购买 nike

假设你有两个数据框

df1 <- data.frame(V1 = c(1, 2, 3), v2 = c("a", "b", "c"))
df2 <- data.frame(V1 = c(1, 2, 2), v2 = c("b", "b", "c"))

这是它们并排的样子:
> cbind(df1, df2)
V1 v2 V1 v2
1 1 a 1 b
2 2 b 2 b
3 3 c 2 c

您想知道在所有变量中哪些观察是重复的。

这可以通过将列粘贴在一起然后使用 %in% 来完成:
df1Vec <- apply(df1, 1, paste, collapse= "")
df2Vec <- apply(df2, 1, paste, collapse= "")
df2Vec %in% df1Vec
[1] FALSE TRUE FALSE

因此,第二个观察是 df2 和 df1 中唯一的一个。

有没有更快的方法来生成这个输出——比如 %IN%,它是跨多个变量的 %in%,还是我们应该满足于 apply(paste) 解决方案?

最佳答案

我会和

interaction(df2) %in% interaction(df1)
# [1] FALSE TRUE FALSE

您可以将其包装在二元运算符中:
"%IN%" <- function(x, y) interaction(x) %in% interaction(y)

然后
df2 %IN% df1
# [1] FALSE TRUE FALSE

rbind(df2, df2) %IN% df1
# [1] FALSE TRUE FALSE FALSE TRUE FALSE

免责声明:我对之前使用 do.call(paste, ...) 的回答做了一些修改。而不是 interaction(...) .如果你愿意,可以查阅历史。我认为 Arun 关于“极其低效”(有点极端恕我直言)的说法仍然成立,但如果你喜欢一个简洁的解决方案,它只使用基础 R 并且快速处理小数据,那可能就是这样。

关于r - 是否有跨多列的 %in% 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23971160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com