在R中计算数据帧中行和列的中值
我有一个数据框,看起来像:在R中计算数据帧中行和列的中值,r,rows,median,R,Rows,Median,我有一个数据框,看起来像: Group1 | Group2 | Score1 | Score2 -------|--------|--------|-------- A | 1 | 10 | 11 A | 2 | 13 | 14 B | 1 | 4 | 7 B | 2 | 9 | 12 A | 1 | 5 |
Group1 | Group2 | Score1 | Score2
-------|--------|--------|--------
A | 1 | 10 | 11
A | 2 | 13 | 14
B | 1 | 4 | 7
B | 2 | 9 | 12
A | 1 | 5 | 11
B | 2 | 9 | 13
A | 2 | 7 | 9
B | 1 | 7 | 10
Group1 | Group2 | Score1 | Score2
-------|--------|--------|--------
A | 1 | 7.5 | 11
A | 2 | 10 | 11.5
B | 1 | 5.5 | 8.5
B | 2 | 9 | 12.5
我需要的是创建一个新变量,它给我每个子组组合的中值,比如
Group1 | Group2 | Score1 | Score2 | Median
-------|--------|--------|--------|-------
A | 1 | 10 | 11 | 10.5
A | 2 | 13 | 14 | 11.5
B | 1 | 4 | 7 | 7.0
B | 2 | 9 | 12 | 10.5
A | 1 | 5 | 11 | 10.5
B | 2 | 9 | 13 | 10.5
A | 2 | 7 | 9 | 11.5
B | 1 | 7 | 10 | 7.0
(我手工计算的中值可能是错误的,但我认为这一点已经得到了证实)
我尝试使用聚合函数,如:
MedianAggregate <- aggregate(df[,45:47],
by = list(df$provider, df$field),
FUN = median)
基本上,我需要的是得到相同的输出,如果我将中值函数应用于矩阵中的三行,而不是每个子组组合的数据帧,我将得到相同的输出
任何帮助都将不胜感激。如果我理解正确,这里有一个可能的解决方案:
library(reshape2)
library(dplyr)
df2 <- melt(df, id.vars = c("Group1","Group2"))
df2 %>% group_by(Group1, Group2) %>% summarise(median = median(value)) %>% merge(df, by = c("Group1","Group2"))
library(重塑2)
图书馆(dplyr)
df2%group_by(Group1,Group2)%%>%总结(中位数=中位数(值))%%>%合并(df,by=c(“Group1,Group2”))
对不起,我不明白这个问题,你能再补充一点细节吗?我刚刚修改了它,希望能让它更清楚。我很抱歉用糟糕的方式解释我需要什么!这正是我需要的!我不知道存在像melt这样的函数。非常感谢:-)您可以使用重塑软件包从宽格式转换为长格式(melt:从宽格式转换为长格式,即多个变量转换为一个值列和一个变量列;cast:从长格式转换为宽格式,即一个变量和一个值列转换为与变量列中变量类型相同的列)。我希望我足够清楚!完全清楚!我知道如何在Stata做这些事情,但搬到R我还在学习!