如何基于R中列表的一个元素创建具有四列的新数据帧

如何基于R中列表的一个元素创建具有四列的新数据帧,r,R,所以我有一个包含12个元素的列表(每个月一个)。这是一月的样子: 列表示经度,行表示纬度。现在我想创建一个数据框,其中一列表示经度,一列表示纬度,一列表示值ie: 平均经纬度月 18.0 113.8W 36.2N一月 11.0 113.8W 33.8N一月 我需要使用这个数据框来绘制12个月内每个月576个坐标对的趋势图(因此24个图乘以24个图) (附加问题:我应该将坐标设为一列并表示为(113.8W,36.2N)还是将其设为两列?使用堆栈,然后添加纬度。假设这是您的数据: X <-

所以我有一个包含12个元素的列表(每个月一个)。这是一月的样子:

列表示经度,行表示纬度。现在我想创建一个数据框,其中一列表示经度,一列表示纬度,一列表示值ie:

平均经纬度月
18.0 113.8W 36.2N一月
11.0 113.8W 33.8N一月

我需要使用这个数据框来绘制12个月内每个月576个坐标对的趋势图(因此24个图乘以24个图)


(附加问题:我应该将坐标设为一列并表示为(113.8W,36.2N)还是将其设为两列?

使用
堆栈
,然后添加纬度。假设这是您的数据:

X <- matrix(rnorm(25, mean=12, sd=10), nr=5); X
rownames(X) <- c("36.2N","33.8N","31.2N","28.8N","26.2N")
colnames(X) <- c("113.8W","111.2W","108.8W","106.2W","103.8W")
X
          113.8W    111.2W    108.8W    106.2W    103.8W
36.2N  1.0286035 12.766437  6.883963  5.847317  3.640007
33.8N 21.2551124 14.551648 14.369379 -6.068930 18.529475
31.2N 14.4679921 14.774468  6.584108  5.563189 16.412931
28.8N  4.6322846 17.368560 24.192276 32.460189 19.516291
26.2N -0.8000894  7.395144 13.741359  6.392376  9.220249

X使用
stack
然后添加纬度。假设这是您的数据:

X <- matrix(rnorm(25, mean=12, sd=10), nr=5); X
rownames(X) <- c("36.2N","33.8N","31.2N","28.8N","26.2N")
colnames(X) <- c("113.8W","111.2W","108.8W","106.2W","103.8W")
X
          113.8W    111.2W    108.8W    106.2W    103.8W
36.2N  1.0286035 12.766437  6.883963  5.847317  3.640007
33.8N 21.2551124 14.551648 14.369379 -6.068930 18.529475
31.2N 14.4679921 14.774468  6.584108  5.563189 16.412931
28.8N  4.6322846 17.368560 24.192276 32.460189 19.516291
26.2N -0.8000894  7.395144 13.741359  6.392376  9.220249

X假设您的列表名为
list\u df
,我们可以使用内置向量
month.abb
按月份名称命名。使用
lappy
,我们可以将矩阵转换为一个数据帧,其中包含列名称、行名称、每个单元格的值以及月份名称。最终,我们可以将所有数据绑定到一起,形成一个数据帧

names(list_df) <- month.abb

do.call(rbind, lapply(seq_along(list_df), function(i) {
   mat <- list_df[[i]]
   data.frame(avg = c(mat), longitude = rep(colnames(mat), each = nrow(mat)), 
         latitude = rep(rownames(mat), ncol(mat)), month = names(list_df)[[i]])
}))

名称(list_df)假设您的列表名为
list_df
,我们可以使用内置向量
month.abb
按月份名称命名。使用
lappy
,我们可以将矩阵转换为一个数据帧,其中包含列名称、行名称、每个单元格的值以及月份名称。最终,我们可以将所有数据绑定到一起,形成一个数据帧

names(list_df) <- month.abb

do.call(rbind, lapply(seq_along(list_df), function(i) {
   mat <- list_df[[i]]
   data.frame(avg = c(mat), longitude = rep(colnames(mat), each = nrow(mat)), 
         latitude = rep(rownames(mat), ncol(mat)), month = names(list_df)[[i]])
}))

name(list_df)这里有一个
tidyverse
方法

重用@Edward的
X

X <- matrix(rnorm(25, mean=12, sd=10), nr=5); X
rownames(X) <- c("36.2N","33.8N","31.2N","28.8N","26.2N")
colnames(X) <- c("113.8W","111.2W","108.8W","106.2W","103.8W")

至于你的附加问题,在大多数情况下,你最好把纬度和经度分开列。

这里有一个
整洁的方法

重用@Edward的
X

X <- matrix(rnorm(25, mean=12, sd=10), nr=5); X
rownames(X) <- c("36.2N","33.8N","31.2N","28.8N","26.2N")
colnames(X) <- c("113.8W","111.2W","108.8W","106.2W","103.8W")

至于您的附加问题,在大多数情况下,您最好将纬度和经度分开列。

请向我们展示您在R中的列表结构。请向我们展示您在R中的列表结构