gpt4 book ai didi

r - 无法使用 plyr 包和使用列表

转载 作者:行者123 更新时间:2023-12-04 09:29:53 26 4
gpt4 key购买 nike

我无法理解 plyr 包的用法。我尝试使用它来拆分存储在列表中的数据帧,应用函数,将结果存储为数据帧并将数据帧再次组合为列表。
因此,鉴于以下数据:

    #create test dfs
df1<-data.frame(a=sample(1:50,10),b=sample(1:50,10),c=sample(1:50,10),d=(c("a","b","c","a","a","b","b","a","c","d")))
df2<-data.frame(a=sample(1:50,9),b=sample(1:50,9),c=sample(1:50,9),d=(c("e","f","g","e","e","f","f","e","g")))
df3<-data.frame(a=sample(1:50,8),b=sample(1:50,8),c=sample(1:50,8),d=(c("h","i","j","h","h","i","i","h")))

#make them a list
list.1<-list(df1=df1,df2=df2,df3=df3)

我想计算每个数据帧的 d 中定义的每个组的平均值。
如果我只在一个数据帧上使用 plyr (按组计算特定列的平均值),则使用 plyr 包的可能性是:
    ddply(df1,.(d),summarise, mean=mean(a))

但是如何将它应用于数据框中的每一列和列表中的每个数据框?以及如何重新组合所有数据,以便最终获得包含结果的矩阵列表?很抱歉这个非常基本的问题,但我是 R 的新手,我真的一直在努力解决这个问题很长一段时间......谢谢。

最佳答案

你需要把所有的数据放在一个大data.frame :

library(reshape)

big_dataframe = ldply(list.1, function(x) melt(x, id.vars = "d"))
> head(big_dataframe)
.id d variable value
1 df1 a a 44
2 df1 b a 17
3 df1 c a 15
4 df1 a a 30
5 df1 a a 49
6 df1 b a 33

...然后使用 ddply在上面。
res = ddply(big_dataframe, .(.id, d, variable), summarise, mn = mean(value))
> res
.id d variable mn
1 df1 a a 40.00000
2 df1 a b 25.25000
3 df1 a c 31.25000
4 df1 b a 22.66667
5 df1 b b 16.00000
6 df1 b c 26.00000
7 df1 c a 9.00000
8 df1 c b 16.50000
9 df1 c c 15.00000
10 df1 d a 28.00000
11 df1 d b 24.00000
12 df1 d c 39.00000
13 df2 e a 18.50000
14 df2 e b 15.50000
15 df2 e c 16.50000
16 df2 f a 26.33333
17 df2 f b 42.00000
18 df2 f c 37.00000
19 df2 g a 26.50000
20 df2 g b 22.00000
21 df2 g c 31.00000
22 df3 h a 29.25000
23 df3 h b 34.25000
24 df3 h c 32.00000
25 df3 i a 30.33333
26 df3 i b 40.00000
27 df3 i c 24.33333
28 df3 j a 21.00000
29 df3 j b 5.00000
30 df3 j c 46.00000

它给出了每个变量的平均值 ( a - c ),每个因子水平 d , 和每个子数据帧 (df1-df3)。

关于r - 无法使用 plyr 包和使用列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14439599/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com