7

これが私がやろうとしていることです。私のデータ フレームには因子変数「国」があり、国に基づいてデータ フレームを分割したいと考えています。次に、すべての国のデータ フレームのすべての変数の列平均を取りたいと思います。

データはこちら: https://github.com/pourque/country-data

ここまでやって...

myList <- split(df1, df1$country)
for(i in 1:length(myList)) {
aggregate <- mapply(myList[[i]][,-c(38:39)], colMeans)
}

(38 列目と 39 列目は要因であるため、含めていません。)

私はこれを読んだ(複数のリストに対する関数)、これは mapply がここでの答えだと思います...しかし、私はこのエラーが発生しています:

Error in match.fun(FUN) : 
'myList[[i]][, -c(38:39)]' is not a function, character or symbol 

多分私はそれを間違ってフォーマットしていますか?

4

4 に答える 4

7

事前にdata.frameをリストに入れるaggregate必要なく、ベースRを使用するのは簡単です。split以下は組み込みのアイリス データを使用した例meanで、1 列目と 2 列目の変数を除くすべての変数の を のグループで計算しSpeciesます。

data(iris)
aggregate(. ~ Species, iris[-(1:2)], mean)
#     Species Petal.Length Petal.Width
#1     setosa        1.462       0.246
#2 versicolor        4.260       1.326
#3  virginica        5.552       2.026

.内部は、aggregateグループ化変数 (この場合は Species) を除いて、data.frame の残りのすべての列を使用することを指定するために使用されます。また、入力データとして指定するためiris[-(1:2)]、1 列目と 2 列目も使用されません。


データの場合、次のようになります。

aggregate(. ~ country, df1[-c(38:39)], mean)
于 2015-05-04T17:19:45.420 に答える
6
library(dplyr)

df1 %>%
    group_by(country) %>%
    select(-age, -gender) %>%
    summarise_each(funs(mean))
于 2015-05-04T17:02:55.467 に答える