2017-02-17 60 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)) 
相關問題