gpt4 book ai didi

删除位于 r 中另一个 data.frame 中的 data.frame 的确切行和行的频率

转载 作者:行者123 更新时间:2023-12-03 21:36:45 24 4
gpt4 key购买 nike

考虑以下两个 data.frames:

a1 <- data.frame(A = c(1:5, 2, 4, 2), B = letters[c(1:5, 2, 4, 2)])
a2 <- data.frame(A = c(1:3,2), B = letters[c(1:3,2)])

我想删除 a1 的确切行位于 a2所以结果应该是:
A  B
4 d
5 e
4 d
2 b

请注意,其中一行是 2 b在 a1 中保留在最终结果中。目前,我使用循环语句,它变得非常慢,因为我的 data.frames 中有许多变量和数千行。是否有任何内置函数可以得到这个结果?

最佳答案

这个想法是,为每个文件添加一个重复的计数器,这样你就可以获得每次出现的行的唯一匹配。数据表很好,因为它很容易计算重复项(使用 .N ),并且它还为集合操作提供了必要的函数( fsetdiff )。

library(data.table)

a1 <- data.table(A = c(1:5, 2, 4, 2), B = letters[c(1:5, 2, 4, 2)])
a2 <- data.table(A = c(1:3,2), B = letters[c(1:3,2)])

# add counter for duplicates
a1[, i := 1:.N, .(A,B)]
a2[, i := 1:.N, .(A,B)]

# setdiff gets the exception
# "all = T" allows duplicate rows to be returned
fsetdiff(a1, a2, all = T)

# A B i
# 1: 4 d 1
# 2: 5 e 1
# 3: 4 d 2
# 4: 2 b 3

关于删除位于 r 中另一个 data.frame 中的 data.frame 的确切行和行的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46657373/

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