正确的子集解决方案

时间:2017-05-02 13:37:37

标签: r

我有两个数据帧clust1和clust2,行数不同。 clust1有53行,clust2有150行。我想对项目进行子集化,以识别clust2中具有与clust1相似的经度和纬度的行项目。

如果我写这段代码:

a <- subset(clust2, clust2$Pickup_longitude == clust1$Pickup_longitude)

我会发生以下错误:

Longer object length is not a multiple of shorter object length

如果我这样写:

a <- subset(clust2, clust2[53,]$Pickup_longitude == clust1$Pickup_longitude)

我会得到答案但是肯定,我的答案是错误的,因为我限制了clust2中的行数。我该怎么做才能得到正确的答案?

2 个答案:

答案 0 :(得分:2)

您可以使用dplyr的semi_join()。

library(dplyr)
a <- semi_join(clust2, clust1, by = "Pickup_longitude")

这应该为你提供clust2中所有具有在clust1中出现的Pickup_longitude值的行。

(编辑在“by”中添加引号 - 感谢Gopala)

答案 1 :(得分:1)

Sarina评论有效,您只需:

a <- subset(clust2, clust2$Pickup_longitude %in% clust1$Pickup_longitude)

如您所知,我还建议您是否要识别具有相似经度和纬度的行,您可以使用which()

which(clust2$Pickup_longitude %in% clust1$Pickup_longitude)

这将为您提供clust2中在clust1中具有相同长度的行号。