gpt4 book ai didi

r - 如何找到一个集合的哪些元素在另一个集合中?

转载 作者:行者123 更新时间:2023-12-04 10:52:16 25 4
gpt4 key购买 nike

我有两组:A 带有 x,y 列,B 也带有 x, y 列。
我需要找到 B 内部的 A 行的索引(x 和 y 都必须匹配)。
我想出了一个简单的解决方案(见下文),但这个比较是在循环和 paste 内部的。增加了更多的额外时间。

B <- data.frame(x = sample(1:1000, 1000), y = sample(1:1000, 1000))
A <- B[sample(1:1000, 10),]
#change some elements
A$x[c(1,3,7,10)] <- A$x[c(1,3,7,10)] + 0.5

A$xy <- paste(A$x, A$y, sep='ZZZ')
B$xy <- paste(B$x, B$y, sep='ZZZ')
indx <- which(A$xy %in% B$xy)
indx

例如,对于单个观察, paste 的替代方案快了近 3 倍
    ind <- sample(1:1000, 1)
xx <- B$x[ind]
yy <- B$y[ind]

ind <- which(with(B, x==xx & y==yy))
# [1] 0.0160000324249268 seconds
xy <- paste(xx,'ZZZ',yy, sep='')
ind <- which(B$xy == xy)
# [1] 0.0469999313354492 seconds

最佳答案

如何使用merge()为你做匹配?

A$id <- seq_len(nrow(A))
sort(merge(A, B)$id)
# [1] 2 4 5 6 8 9

编辑:

或者,要摆脱两种不必要的排序,请使用 sort=选项 merge()
merge(A, B, sort=FALSE)$id
# [1] 2 4 5 6 8 9

关于r - 如何找到一个集合的哪些元素在另一个集合中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7905616/

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