gpt4 book ai didi

r - 基于 R 中另一个数据框中的多列删除数据框中的行

转载 作者:行者123 更新时间:2023-12-03 23:24:08 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Find complement of a data frame (anti - join)

(7 个回答)


6年前关闭。




我想删除具有与另一个数据框中的值匹配的列的特定值的行。

a<-c(1,1,2,2,2,4,5,5,5,5)
b<-c(10,10,22,30,30,30,40,40,40,40)
c<-c(1,2,1,2,2,2,2,1,1,2)
d<-rnorm(1:10)
data<-data.frame(a,b,c,d)

a<-c(2,5)
b<-c(30,40)
c<-c(2,1)
x<-data.frame(a,b,c)

这样 y 就可以变成:
 a  b c          d
1 10 1 -0.2509255
1 10 2 0.4142277
2 22 1 -0.1340514
4 30 2 -1.5372009
5 40 2 1.9001932
5 40 2 -1.2825212

我尝试了以下方法,但没有用:
y<-data[!data$a==a & !data$b==b & !data$c==c,] 

y<-subset(data, !data$a==x$a & !data$b==x$b & !data$c==x$c)

我还尝试仅标记应该删除的那些,以便在第二步中进行子集化,但这也不起作用:
y<-data
y$rm<-ifelse(y$a==x$a & y$b==x$b & y$c==x$c, 1, 0)

真正的“数据”和“x”要长得多,并且与 x 中的每一行匹配的数据中的行数是可变的。

最佳答案

我们可以使用 anti_join来自 dplyr .它将返回 'data' 中与 'x' 中的值不匹配的所有行。我们在 by 中指定要考虑的变量争论。

library(dplyr)
anti_join(data, x, by=c('a', 'b', 'c'))

关于r - 基于 R 中另一个数据框中的多列删除数据框中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31942728/

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