我有一个名为ERA500的列表,我从一个文件中导入,如下所示:
Year Month Day Time Wwind Swind Geop
335 1961 12 1 12 3.998 -10.759 514.689
336 1961 12 2 12 4.757 -11.077 506.611
337 1961 12 3 12 -2.606 -17.207 510.742
338 1961 12 4 12 -1.110 -19.290 510.655
它有数千行,就像这一行一样。我想把它分成12个列表,每个月1个。所以我尝试了这个:
Fyrsta <- list()
for (i in 1:12 ) {
Fyrsta[i] = subset(ERA500,Month==i)
}
我从中得到的只是无数年的无尽名单。如何列出这12个新列表?
答案 0 :(得分:3)
听起来你有一个数据框。在这种情况下,只需使用split
:
Frysta <- split(ERA500, ERA500$Month)
这将生成一个包含12个数据框的列表,每个月一个。
我应该补充一下,听起来这是对ERA500
的每个组成部分进行某种分段分析的前奏。如果是这样,您应该考虑查看能够非常简单有效地分析数据帧子组的包data.table
或dplyr
。
例如,这个:
library(data.table)
data.table(ERA500)[, list(mean(Wwind), max(Swind)), by=Month]
每月会返回平均Wwind
和最大Swind
。
答案 1 :(得分:1)
要分配给列表元素,请使用[[]]
语法:
Fyrsta[[i]] = subset(ERA500,Month==i)
您可以在没有显式循环的情况下执行此操作,并且不使用lapply
预先列出列表:
Fyrsta <- lapply(1:12, function(i) subset(ERA500, Month==i))
最好使用[
索引数据框,而不是subset
,这可能会在某些用途中造成麻烦。这是语法:
Fyrsta <- lapply(1:12, function(i) ERA500[ERA500$Month==i,])