R - 列出清单

时间:2014-03-09 00:21:13

标签: r list

我有一个名为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个新列表?

2 个答案:

答案 0 :(得分:3)

听起来你有一个数据框。在这种情况下,只需使用split

Frysta <- split(ERA500, ERA500$Month)

这将生成一个包含12个数据框的列表,每个月一个。

我应该补充一下,听起来这是对ERA500的每个组成部分进行某种分段分析的前奏。如果是这样,您应该考虑查看能够非常简单有效地分析数据帧子组的包data.tabledplyr

例如,这个:

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,])