0

我有以下数据框,并希望返回“egress”中不是“both”的所有行。 setdiff似乎没有奏效。在这个例子中,我需要一个返回 7 行的新数据框。我怎样才能做到这一点?

我的部分问题可能是我计算了“两者”,这有时会截断尾随的 0。“出口”是另一个数据框。“both”包含“ingress”和“egress”数据帧中的行。

两者 = 合并(入口,出口,by=c(“lat”,“lng”)

出口

       纬度
1 13.8333 44.6833
2 31.1429 -81.4710
3 37.4020 -122.0780(匹配)
4 33.9553 -83.3937
5 33.9553 -83.3937
6 38.9628 -95.2554
7 18.9667 72.8333
8 38.8147 -77.0647
9 32.5670 -84.9870(匹配)
10 30.5670 -85.9870(匹配)

入口

      纬度
1 38.8787 -77.1019
2 52.2500 21.0000
3 37.4020 -122.0780
4 40.7811 -74.0648
5 32.5670 -84.9870
6 30.5670 -85.9870

两个都

     纬度
1 30.567 -85.987(尾随 0 被截断)
2 32.567 -84.987(尾随 0 被截断)
3 37.402 -122.078(尾随 0 被截断)
4

2 回答 2

3

这是我可能会做的。(如果您担心有时只有一个 data.frames 会包含尾随零,您可能希望首先使用类似sprintf()使两个 data.frames 的格式相同的东西。)

A <- apply(egress, 1, paste, collapse="_")
B <- apply(ingress, 1, paste, collapse="_")
egress[! A %in% B, ]
#       lat      lng
# 1 13.8333  44.6833
# 2 31.1429 -81.4710
# 4 33.9553 -83.3937
# 5 33.9553 -83.3937
# 6 38.9628 -95.2554
# 7 18.9667  72.8333
# 8 38.8147 -77.0647
于 2012-04-18T21:16:50.540 回答
1

ingress您可以为以后的子集设置一个虚拟变量。

ingress$both <- 1
not_both <- merge(egress, ingress, by=c("lat","lng"), all.x = T)
not_both <- subset(not_both, is.na(both))
于 2012-04-18T21:35:05.557 回答