2017-02-17 62 views
1

我有一个简单data.frame,看起来像这样:使用dplyr汇总值并将其作为向量存储在数据框中?

Group  Person Score_1 Score_2 Score_3 
1   1  90  80  79 
1   2  74  83  28 
1   3  74  94  89 
2   1  33   9   8 
2   2  94  32  78 
2   3  50  90  87 

我需要首先需要找到Score_1的均值,组内跨人崩溃(即Score_1意味着集团1,第2组的Score_1意味着等等),然后我需要在所有这两个组中找到Score_1的平均值。我如何计算这些值并将它们存储为单个对象?我已经使用在dplyr的“总结”功能,用下面的代码:

summarise(group_by(data,Group),mean(bias,na.rm=TRUE)) 

我想,最终创造出一个第6列给出了平均,整个人反复对每个组,然后第7列给出了所有群体的宏大意义。

我敢肯定还有其他方法可以做到这一点,我愿意接受建议(尽管我仍然想知道如何在dplyr中做到这一点)。谢谢!

+2

你需要'mutate',而不是'summarise' – akrun

回答

1

要创建一列,我们使用mutate而不是summarise。我们得到的总平均值(MeanScore1),然后通过“集团”组合,获得mean按组(“MeanScorebyGroup”),最后用select

library(dplyr) 
df1 %>% 
    mutate(MeanScore1 = mean(Score_1)) %>% 
    group_by(Group) %>% 
    mutate(MeanScorebyGroup = mean(Score_1)) %>% 
    select(1:5, 7, 6) 

责令列,但,这也可以做到以简单的方式

df1$MeanScorebyGroup <- with(df1, ave(Score_1, Group)) 
df1$MeanScore1 <- mean(df1$Score_1) 
+0

@Oryx很乐意帮助你也可以检查[这里](HTTP:// stackoverflow.com/help/someone-answers) – akrun

2

data.table使用base R有利于这样的任务:

library(data.table) 

dt <- read.table(text = "Group  Person Score_1 Score_2 Score_3 
      1   1  90  80  79 
      1   2  74  83  28 
      1   3  74  94  89 
      2   1  33   9   8 
      2   2  94  32  78 
      2   3  50  90  87", header = T) 

dt <- data.table(dt) 

# Mean by group 
dt[, score.1.mean.by.group := mean(Score_1), by = .(Group)] 
# Grand mean 
dt[, score.1.mean := mean(Score_1)] 
dt 
0

@akrun你刚刚吹了我的脑海!

只是为了澄清你说什么,这是我的解释:

library(plyr) 

Group <- c(1,1,1,2,2,2) 
Person <- c(1,2,3,1,2,3) 
Score_1 <- c(90,74,74,33,94,50) 
Score_2 <- c(80,83,94,9,32,90) 
Score_3 <- c(79,28,89,8,78,87) 

df <- data.frame(cbind(Group, Person, Score_1, Score_2, Score_3)) 

df2 <- ddply(df, .(Group), mutate, meanScore = mean(Score_1, na.rm=T)) 
mutate(df2, meanScoreAll=mean(meanScore)) 
相关问题