从数据框中删除其列值与另一个数据框的列值不匹配的数据 - R

时间:2013-04-21 03:17:38

标签: r

所以我有两个不同维度的数据框。

第一个,x,大约10,000行,长看起来像:

Year    ID    Number
2008.1  38573 1
2008.2  24395 3

(介于两者之间的大量数据)

2008.4  532   4

第二个,x2,长约80,000行,看起来像:

Year    ID     Number
2008.1  38573  2
2008.2  24395  3

(介于两者之间的大量数据)

2008.4  532    4

基本上,我想删除满足以下条件的第二个数据中的行:行中的Year,ID和Number值与第一个数据框的任何行都不匹配。所以在上面的例子中,我将从第二个数据帧中删除第1行,因为数字不匹配。

我试过了:

x2new <- x2[(x2$ID == x$ID && x2$Year==x$Year && x2$Number == x$Number),]

但它不起作用,因为两个数据帧的长度不同。

我尝试过双循环来删除没有所有3个条件的行,但R根本无法进行那么多迭代。

请帮忙!感谢。

2 个答案:

答案 0 :(得分:3)

一个简单的merge

 merge(dat1,dat2)

以您的数据为例:

dat1 <- read.table(text='Year,ID,Number
2008.1,38573,1
2008.4,532,4
2008.2,24395,3',header=TRUE,sep=',')

dat2 <- read.table(text='Year,ID,Number
2008.1,38573,2
2008.4,532,4
2008.2,24395,3',header=TRUE,sep=',')

然后你得到:

merge(dat1,dat2)
    Year    ID Number
1 2008.2 24395      3
2 2008.4   532      4

答案 1 :(得分:0)

我知道你要删除第一个数据框中三列中没有一列匹配的所有行,并保留至少一列匹配的所有行,对吧?如果是这样,那就这样做:

newX2 <- x2[ x2$ID %in% x$ID | x2$Year %in% x$Year | x2$Number %in% x$Number,]
相关问题