所以我有两个不同维度的数据框。
第一个,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根本无法进行那么多迭代。
请帮忙!感谢。
答案 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,]