2013-02-25 63 views
1

我对R相对比较陌生,有一个复杂的情况需要解决。我已经将超过1000个数据帧的列表上传到R中,并将其称为此列表x。我想要做的是采取一定的数据帧,并采取整个数据帧的平均值和方差(不包括每个的第一列),并将其保存到两个单独的向量。例如,我希望从元素(3)开始到元素(54)的列表中的每个第三个数据帧的均值和方差。来自R中数据帧列表的意思

所以我最终想有两个向量:

meanvector=c(mean(data frame(3)), mean(data frame(6)),..., mean(data frame(54))) 
variancevector=c(var(data frame (3)), var(data frame (6)), ..., var(data frame(54))) 

这个问题是远远高于我的知识水平,但我想我能做到有效地使用某种循环的,但我不知道怎么走关于制作这样的循环。任何帮助将非常感激!先谢谢你。

+0

当你的意思是'不包括第一column'整个data.frame,你的意思'的所有其他列separately'手段(或)'第一列被移除的整个data.frame的一个平均值'? – Arun 2013-02-25 21:13:03

+0

我的意思是整个data.frame的一个平均值,删除第一列。 – user1836894 2013-02-25 21:33:52

+0

好,那我就明白了吧。我的答案应该工作。 – Arun 2013-02-25 21:34:39

回答

3

您可以使用lapply并通过指标如下:

ids <- seq(3, 54, by=3) 
out <- do.call(rbind, lapply(ids, function(idx) { 
    t <- unlist(x[[idx]][, -1]) 
    c(mean(t), var(t)) 
})) 
+0

非常好!谢谢,这正是我想要的。 – user1836894 2013-02-25 21:34:17

1

如果x是1000个数据帧的列表,则可以使用lapply返回此列表子集的均值和差异。

ix = seq(1, 1000, 3) 
lapply(x[ix], function(df){ 
    #exclude the first column 
    c(mean(df[,-1]), var(df[,-1])) 
}) 
+0

我不确定是否可以直接采用'df'的意思,而不会发出警告。而且这也需要每列的手段,而不是整个'data.frame'(iiuc)。 – Arun 2013-02-25 21:10:18