我有两个数据帧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中的行数。我该怎么做才能得到正确的答案?
答案 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中具有相同长度的行号。