【发布时间】:2014-08-13 08:43:50
【问题描述】:
我在数据框上使用融化和均值时遇到问题。也许这只是一个初学者的问题。
我有一个包含两个条件和 3 个重复的数据框
set.seed(1)
testdf <- data.frame(name1=letters[1:5],con1_1=floor(runif(5,20,35)),con1_2=floor(runif(5,20,35)),con1_3=floor(runif(5,20,35)),con2_1=floor(runif(5,20,35)),con2_2=floor(runif(5,20,35)),con2_3=floor(runif(5,20,35)))
print(testdf)
name1 con1_1 con1_2 con1_3 con2_1 con2_2 con2_3
1 a 23 33 23 27 34 25
2 b 25 34 22 30 23 20
3 c 28 29 30 34 29 25
4 d 33 29 25 25 21 33
5 e 23 20 31 31 24 25
现在我融化数据框得到这样的东西,我想计算每个条件的平均值......
melt(testdf[1:7],id.vars='name1')
name1 variable value mean_con1 mean_con2
1 a con1_1 23 26.33333 28.66667
2 b con1_1 25 27.00000 24.33333
3 c con1_1 28 29.00000 29.33333
4 d con1_1 33 29.00000 26.33333
5 e con1_1 23 24.66667 26.66667
6 a con1_2 33 26.33333 28.66667
7 b con1_2 34 27.00000 24.33333
8 c con1_2 29 29.00000 29.33333
9 d con1_2 29 29.00000 26.33333
10 e con1_2 20 24.66667 26.66667
11 a con1_3 23 26.33333 28.66667
...
有没有办法用融化的数据框计算平均值,还是我必须重新创建原始数据框并像下面这样计算平均值?
testdf$mean_con1 <- apply(testdf[2:4],1,mean)
testdf$mean_con2 <- apply(testdf[5:7],1,mean)
编辑:
我刚刚意识到,我的问题有误。您的答案是正确的,但我真正要寻找的只是一栏中的方法。根据变量交替... 这有意义吗?
melt(testdf[1:7],id.vars='name1')
name1 variable value mean
1 a con1_1 23 26.33333
2 b con1_1 25 27.00000
3 c con1_1 28 29.00000
4 d con1_1 33 29.00000
5 e con1_1 23 24.66667
6 a con1_2 33 26.33333
7 b con1_2 34 27.00000
...
16 a con2_1 27 28.66667
17 b con2_1 30 24.33333
18 c con2_1 34 29.33333
19 d con2_1 25 26.33333
20 e con2_1 31 26.66667
21 a con2_2 34 28.66667
22 b con2_2 23 24.33333
...
好吧,也许我解释一下我想要做什么。我想用 ggplot 绘制数据,我想制作表示平均值的条形,并将值作为 geom_points 作为覆盖。我想通过复制给点上色,并按条件对所有内容进行分组......希望有人有想法......
【问题讨论】:
-
请查看我更新的解决方案
-
添加你的绘图问题会显着改变问题,并不是一个真正解决关于 SO 问题的好方法。最好将这些不同的问题隔离为不同的问题。
-
标题'计算融化数据框中变量的均值,按name1分组'告诉我们的远不止'使用融化和均值的问题'。
-
@smci 感谢您指出这一点。有时很难为这个问题找到一个好的标题:-)
标签: r dataframe mean melt split-apply-combine