【发布时间】:2011-11-11 14:12:30
【问题描述】:
这以前对我有用,但现在不行了,在我在这里寻求帮助之前,我花了两天时间修修补补。 我有两个数据集,一个称为 Access,另一个称为 CO2。每个都有四个变量,其中两个是常见的,是我想用来合并两个数据集的。只是为了玩它真正节省,我在这里粘贴 head() 和 str() 输出:
> head(Access) > head(CO2)
x y access x y CO2equ
1 -32.65 83.65 0.00 1 -32.65 83.65 183316.4
2 -36.85 83.55 4481.25 2 -36.85 83.55 173327.8
3 -36.75 83.55 4464.75 3 -36.75 83.55 301413.9
4 -36.65 83.55 4448.25 4 -36.65 83.55 360757.2
5 -36.55 83.55 4431.00 5 -36.55 83.55 409523.5
6 -36.45 83.55 4414.50 6 -36.45 83.55 448302.0
> str(Access)
'data.frame': 2183106 obs. of 3 variables:
$ x : num -32.7 -36.8 -36.8 -36.7 -36.5 ...
$ y : num 83.7 83.5 83.5 83.5 83.5 ...
$ access: num 0 4481 4465 4448 4431 ...
- attr(*, "data_types")= chr "N" "N" "N"
> str(CO2)
'data.frame': 2183106 obs. of 3 variables:
$ x : num -32.7 -36.9 -36.8 -36.7 -36.6 ...
$ y : num 83.6 83.5 83.5 83.5 83.5 ...
$ CO2equ: num 183316 173328 301414 360757 409523 ...
- attr(*, "data_types")= chr "N" "N" "N"
现在我正在尝试合并()的版本。第一个导致一个空的data.frame,第二个在所有行中存在两次,一次用于第一个数据集中的变量,第二个用于第二个数据集中的变量:
> M1 = merge(Access, CO2, c("x","y"))
> head(M1)
[1] x y access CO2equ
<0 rows> (or 0-length row.names)
> M2 = merge(Access, CO2, by=c("x","y"), all=TRUE)
> length(M2$x)
[1] 4366212
> head(M2)
x y access CO2equ
1 -179.95 -89.95 NA 0
2 -179.95 -89.85 NA 0
3 -179.95 -89.75 NA 0
4 -179.95 -89.65 NA 0
5 -179.95 -89.55 NA 0
6 -179.95 -89.45 NA 0
显然,各自的 x 值和 y 值不被认为是等效的 - 但我不知道为什么。数据类型相同,值看起来相同,最糟糕的是,几个月前我成功地做到了这一点。那时,我保存命令历史记录,现在当我将其复制并粘贴到我的 R 控制台时,它不起作用。我在 R 2.13.0 和 Revolution R Enterprise 4.3 中都试过了。我有理由确定这不是软件错误,而是一些微不足道的事情,即使在花了两天时间之后我也忽略了。
干杯,
乔辰
【问题讨论】:
-
您应该将
dput()的输出添加到您的问题中,因为您的示例对我有用。 -
我怀疑 x 和 y 有一些数字没有显示出来。
-
同意gsk3。您正在隐式测试浮点数的相等性,并且很可能被 FAQ 7.31 绊倒:cran.r-project.org/doc/FAQ/…