如何将纬度(行)x 经度(列)数据框更改为 R 中的纬度(第 1 列)、经度(第 2 列)、值(第 3 列)数据框?

How to change a latitude (rows) x longitude (columns) data frame into a latitude (column 1), longitude (column 2), value (column 3) data frame in R?

我有一个数据框,其中纬度 (lat) 值是行的名称,经度 (lon) 值是列的名称,数据框的每个单元格是一个温度 (temp)我感兴趣的值(或 NA 值)例如:

    lon  lon  lon  lon  lon  lon
lat temp temp temp temp temp temp
lat temp temp temp temp temp temp
lat temp temp temp temp temp temp
lat temp temp temp temp temp temp

我的问题是,如何重新格式化此数据框,使其格式如下:

    C1    C2    C3
R1  lat  lon   temp
R2  lat  lon   temp
R3  lat  lon   temp
R4  lat  lon   temp

任何帮助、函数或示例代码将不胜感激!

我们可以使用

as.data.frame(as.table(m1))

或使用 reshape2

中的 melt
library(reshape2)
melt(m1)

我们可以使用 tidyr 中的 pivot_longer。这是一个模拟数据的例子:

df <- structure(list(lon1 = c(1L, 1L, 1L, 1L), lon2 = c(2L, 2L, 2L, 
2L), lon3 = c(3L, 3L, 3L, 3L), lon4 = c(3L, 3L, 3L, 3L), lon5 = c(4L, 
4L, 4L, 4L), lon6 = c(5L, 5L, 5L, 5L)), row.names = c("lat1", 
"lat2", "lat3", "lat4"), class = "data.frame")

library(dplyr)
library(tidyr)
df %>% 
  rownames_to_column("latitude") %>% 
  pivot_longer(
    cols = -latitude,
      names_to="longitude",
      values_to= "temperature"
    )

输出:

   latitude longitude temperature
   <chr>    <chr>           <int>
 1 lat1     lon1                1
 2 lat1     lon2                2
 3 lat1     lon3                3
 4 lat1     lon4                3
 5 lat1     lon5                4
 6 lat1     lon6                5
 7 lat2     lon1                1
 8 lat2     lon2                2
 9 lat2     lon3                3
10 lat2     lon4                3
# ... with 14 more rows