【问题标题】:Converting non-numeric matrix into numeric将非数字矩阵转换为数字
【发布时间】:2017-12-13 08:38:40
【问题描述】:

我有一个包含经度和纬度的导入表,并希望从中创建一个空间网格。 坐标格式如下:

[1] 6.955 6.937 6.956 6.923

所以对我来说看起来是数字。但是尝试创建网格时会发生此错误:

.local(obj, ...) 中的错误:
无法从非数值矩阵推导出坐标

当我尝试使用 as.numeric 更改格式时,我得到以下结果:

[1] 10  9  6  8

如何在不改变数值的情况下转换数值格式的坐标?


longitude = structure(c(9L, 7L, 10L, 3L, 8L, 4L, 6L, 2L, 11L, 1L, 5L, 9L, 
7L, 10L, 3L, 8L, 4L, 6L, 2L, 11L, 1L, 5L), .Label = c("6.920", 
"6.922", "6.923", "6.924", "6.926", "6.936", "6.937", "6.939", 
"6.955", "6.956", "6.958"), class = "factor")

latitude = structure(c(10L, 9L, 6L, 8L, 1L, 5L, 3L, 2L, 7L, 8L, 4L, 10L, 
9L, 6L, 8L, 1L, 5L, 3L, 2L, 7L, 8L, 4L), .Label = c("50.911", 
"50.918", "50.920", "50.929", "50.930", "50.931", "50.934", "50.950", 
"50.965", "50.969"), class = "factor")

原始表luftdaten.set 包含纬度、经度和颗粒物值。我试图创建一个网格:

coordinates(luftdaten.set) <- ~ latitude + longitude 

我还尝试创建一个只有坐标的数据框并尝试从中派生一个网格:

luftdaten.grid <- data.frame(latitude, longitude) 
luftdaten.grid <- data.frame(latitude, longitude) 

两者都会引发描述的错误。

coordinates 在 SpatialTools 的“sp”包中。

【问题讨论】:

  • str给出的当前类型是什么?如果是因素,您需要执行 as.numeric(as.character(...)) 将标签转换为数字,而不是获取它们在内部表示的整数。
  • 检查列的class是否为因子,如果是使用as.numeric (as.character(your column))
  • 我的数据的 dput(mat) 结果是: > dput(longitude) structure(c(9L, 7L, 10L, 3L, 8L, 4L, 6L, 2L, 11L, 1L, 5L , 9L, 7L, 10L, 3L, 8L, 4L, 6L, 2L, 11L, 1L, 5L), .Label = c("6.920", "6.922", "6.923", "6.924", "6.926", " 6.936", "6.937", "6.939", "6.955", "6.956", "6.958"), class= "因子") > dput(纬度)结构(c(10L, 9L, 6L, 8L, 1L, 5L , 3L, 2L, 7L, 8L, 4L, 10L, 9L, 6L, 8L, 1L, 5L, 3L, 2L, 7L, 8L, 4L), .Label = c("50.911", "50.918", "50.920" , "50.929", "50.930", "50.931", "50.934", "50.950", "50.965", "50.969"), class= "因子")
  • 我尝试使用 as.numeric (as.character(your column)) 表达式,但它仍然返回相同的错误消息
  • longitude &lt;- as.numeric(as.character(longitude)) 似乎可以转换为数字。但是,如果在稍后阶段您仍然收到错误,您也应该显示此代码。

标签: r matrix numeric sp


【解决方案1】:

这样就可以了:

longitude <- as.numeric(as.character(longitude))
latitude <- as.numeric(as.character(latitude))
luftdaten.grid <- data.frame(latitude, longitude)
attach(luftdaten.grid)
coordinates(luftdaten.grid) <- ~ latitude + longitude

【讨论】:

    【解决方案2】:

    假设您正在尝试获取一个矩阵,其中每一行都是一个纬度/经度对:

    as.matrix(cbind(as.numeric(as.character(latitude)),
                    as.numeric(as.character(longitude))))
    
            [,1]  [,2]
     [1,] 50.969 6.955
     [2,] 50.965 6.937
     [3,] 50.931 6.956
     [4,] 50.950 6.923
     [5,] 50.911 6.939
     [6,] 50.930 6.924
     [7,] 50.920 6.936
     [8,] 50.918 6.922
     [9,] 50.934 6.958
    [10,] 50.950 6.920
    [11,] 50.929 6.926
    [12,] 50.969 6.955
    [13,] 50.965 6.937
    [14,] 50.931 6.956
    [15,] 50.950 6.923
    [16,] 50.911 6.939
    [17,] 50.930 6.924
    [18,] 50.920 6.936
    [19,] 50.918 6.922
    [20,] 50.934 6.958
    [21,] 50.950 6.920
    [22,] 50.929 6.926
    

    【讨论】:

    • Thx,但显然坐标函数不适用于矩阵。然后它会抛出以下错误消息:(函数(类,fdef,mtable)中的错误:无法找到函数'坐标
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 2015-08-18
    • 2019-09-15
    相关资源
    最近更新 更多