【发布时间】:2013-02-18 23:10:33
【问题描述】:
我有一个带有 LON、LAT、VALUE 的大型数据框(100,000 行),我想将其转换为矩阵。 (EPSG 中的坐标:3035)。
我用以下命令尝试了 reshape2 包
acast(df, lon~lat, value.var="value")
效果很好。
当我将坐标转换为“EPSG:4326”并运行相同的代码时,当我得到错误时。
str(df1)
data.frame': 168643 obs. of 3 variables:
$ x: num 28 28.1 27.8 28 28.1 ...
$ y: num 71.1 71 71 71 71 ...
$ z: num 0.0893 0.093 0.085 0.0886 0.0924 ...
> aa=acast(df1, x~y, value.var="z")
Error in seq_len(n) : argument must be coercible to non-negative integer
In addition: Warning message:
In match(seq_len(n), overall, nomatch = NA) : NAs introduced by coercion
对于像下面给出的一个可重复的示例,代码有效,但为什么它是像我这样的大型数据框,我收到错误。它与坐标变换有什么关系吗?
x=c(-8.084929925, -8.01229693, -7.939629855, -7.866928803, -7.794193877, -7.721425179, -7.648622813, -7.575786885, -7.502917498, -7.430014757, -7.357078769, -7.284109638, -7.211107472, -7.138072377, -7.065004461, -6.99190383)
y=c(53.07977473, 53.09085897, 53.10189964, 53.11289671, 53.12385014, 53.1347599, 53.14562596, 53.15644829, 53.16722685, 53.17796162, 53.18865255, 53.19929962, 53.2099028, 53.22046205, 53.23097734, 53.24144865)
z=c(0.065, 0.063, 0.062, 0, 0, 0, 0.061, 0.062, 0.064, 0.06, 0.069, 0.074, 0.079, 0.08, 0.092, 0.10)
df=data.frame(x,y,z)
acast(df, x~y, value.var="z")
有什么想法吗?
【问题讨论】:
-
你能让你的例子可重现吗?
-
适用于这些数据:
df <- data.frame(lon=sample(10:20),lat=sample(10:20),value=10:20) -
@PaulHiemstra 我添加了一个可重复的小例子。
-
除了对角线元素之外,acast()-ed-matrix 中没有任何内容。除非 x 和 y 位置具有合理的重复程度,否则不应使用矩阵对象。您的所有值和 y 值都是不同的。您需要回到开头并解释您要如何处理这些数据,而不是请求无法实现任何合理目标的建议。
-
@DWin 谢谢。我的 x 和 Y 位置确实有合理程度的重复。我需要根据建模者的要求将数据转换为矩阵以用于某些建模目的。
标签: r