2017-12-12 5 views
0

正しいグループ化されたデータの平均値が入力される:R 2つの列ヘッダに転送つの列と下

X1 = c("aaa", "aaa", "aaa", "qqq", "qqq", "qqq") 
X2 = c("bbb", "bbb", "bbb", "rrr", "rrr", "rrr") 
X3 = c("ccc", "ccc", "ccc", "ttt", "ttt", "ttt") 
X4 = c("usa", "can", "usa", "ger", "rus", "ger") 
X5 = c(400, 888, 500, 300, 456, 500) 
df <- data.frame(X1,X2,X3,X4,X5) 

Iは、同じ国の平均で私の出力iとjを希望:

X1 X2 X3 i j 
aaa, bbb, ccc, 450, 888 
qqq, rrr, ttt, 400, 456 

私はdouble-aggregateとgroupingを試していますが、forループを避けることを望んでいますが、それでもそれを管理することはできません。

+2

あなたは4つの固有の国を持っていて、有益な列名を持たない2行になります....--)私はどのようにあなたを助けますか?どんな価値観がどの国に対応しているかは、どのように分かりますか? – AntoniosK

+0

あなたはusaとgerをグループ化していますが、グループ化された他の変数の隣の新しい列に缶とrusを貼り付けていますか?あなたの出力は理にかなっていません。 –

答えて

1
df$averages = ave(df[,"X5"], df[c("X1", "X2", "X3", "X4")], FUN = mean) 
aggregate(averages~., df[c("averages", "X1", "X2", "X3")], range) 
# X1 X2 X3 averages.1 averages.2 
#1 aaa bbb ccc  450  888 
#2 qqq rrr ttt  400  456 
1

ない私はあなたがあなたのようなあなたの出力を行いたい理由を理解してください。国ごとにグループ化します。

library(dplyr) 

> df %>% group_by(X4, X1, X2, X3) %>% summarise(i = sum(X5)) 
# A tibble: 4 x 5 
# Groups: X4, X1, X2 [?] 
     X4  X1  X2  X3  i 
    <fctr> <fctr> <fctr> <fctr> <dbl> 
1 can aaa bbb ccc 888 
2 ger qqq rrr ttt 800 
3 rus qqq rrr ttt 456 
4 usa aaa bbb ccc 900 
関連する問題