1

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

第一个 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),]

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

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

请帮忙!谢谢。

4

2 回答 2

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
于 2013-04-21T03:35:41.700 回答
0

我知道您想删除第一个数据框中三列中没有一列匹配的所有行,并保留至少一列匹配的所有行,对吗?如果是这样,只需这样做:

newX2 <- x2[ x2$ID %in% x$ID | x2$Year %in% x$Year | x2$Number %in% x$Number,]
于 2013-04-21T03:39:34.183 回答