2017-01-31 9 views
1

Rの列のリストの平均を取って問題を実行しようとしています。 B(私がやろうとしています何Rの複数の列の平均

A B C D 
1 2 3 4 
5 6 7 8 
9 10 11 12 

は、列C(A、C)の平均を取ると、(E)と言う値として保存しているだけでなく、列cの平均:のは、私が持っているとしましょう、D)、それをFと言う別の値として保存させますか?それは可能ですか?

E F 
2 3 
6 7 
10 11 

答えて

2

チェックアウトdplyr取得するapplyを使用します。

library(dplyr) 
df <- df %>% mutate(E=(A+C)/2, F=(B+D)/2) 
df 

    A B C D E F 
1 1 2 3 4 2 3 
2 5 6 7 8 6 7 
3 9 10 11 12 10 11 
2

我々は、列1 & 2とデータセット、3 & 4と別のものをサブセット一緒にそれらを追加、2による除算、およびsetNames

setNames((df1[1:2] + df1[3:4])/2, c("E", "F")) 
# E F 
#1 2 3 
#2 6 7 
#3 10 11 

と列名を変更することができまたは、listにリサイクル論理ベクトルを使用して、listsapplyを使用)をループしてrowMeansを取得して、rowMeansを取得してください。

i1 <- c(TRUE, FALSE) 
sapply(list(df1[i1], df1[!i1]), rowMeans) 

それとも別のオプションは、データセットunlistで、arrayに変換し、mean

apply(array(unlist(df1), c(3, 2, 2)), c(1,2), mean) 
+0

私が持っている場合をa1、a2、a3、b1、b2、b3、c1、c2、c3などの列のリストを作成し、平均スコアo f列a1、a2、a3を列に、同様にbとcをa、b、cの平均を各列の単一列に入れることができますか? –

+1

@DanteSmithその場合、 'sapply(split.default(df1、sub(" \\ d + "、"、colnames(df1)))、rowMeans) ' – akrun

+0

\\ d +はどこで再生されますか?それは数字で列を分割していますか? –