如何基于R中列表的一个元素创建具有四列的新数据帧
所以我有一个包含12个元素的列表(每个月一个)。这是一月的样子: 列表示经度,行表示纬度。现在我想创建一个数据框,其中一列表示经度,一列表示纬度,一列表示值ie:如何基于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 <-
平均经纬度月
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中的列表结构