次のことを行う簡単な方法はありますか(つまり、「for」ループを使用する必要はありません)。
いくつかのデータフレームがあります。それらを要約するためにplyr操作を使用したいと思います。この例では、東と西の2つのデータフレームがあり、国ごとの支出と試行で両方を要約したいと思います。
データフレームの例は次のとおりです。
west <- data.frame(
spend = sample(50:100,50,replace=T),
trials = sample(100:200,50,replace=T),
country = sample(c("usa","canada","uk"),50,replace = T)
)
east <- data.frame(
spend = sample(50:100,50,replace=T),
trials = sample(100:200,50,replace=T),
country = sample(c("china","japan","skorea"),50,replace = T)
)
および両方のデータフレームの組み合わせリスト:
combined <- c(west,east)
私がやりたいのは、これらのデータフレームの両方で同時にddplyタイプの操作を行い、出力をリストにすることです(少なくともそれは最も簡単に思えます)。たとえば、1つのデータフレームで操作している場合、次のようになります。
country.df <- ddply(west, .(country), summarise,
spend = sum(spend),
trials = sum(trials)
)
しかし、私はこれを大規模にやりたいと思っています。llply引数で同様の構文を使用しようとしましたが、機能しません(痛々しいほど明白なものが欠けているように感じます):
countries.list <- llply(combined, .(country), summarise,
spend = sum(spend),
trials = sum(trials)
)
「FUN(X [[1L]]、...)のエラー:非関数を適用しようとしました」というエラーが返されます。
...関数を記述し、それを適用引数に渡すことで、これを行う方法を考えることができます。しかし、llplyはこの「箱から出して」処理できるはずです。これは、ツールの機能をかなり簡単に使用できるためです。
ここで何が欠けていますか?
私はこのようにします:
combined <- list(east, west)
lapply(combined, ddply, .(country), summarise, spend = sum(spend),
trials = sum(trials))
# [[1]]
# country spend trials
# 1 china 1572 2976
# 2 japan 1075 1989
# 3 skorea 1262 2526
#
# [[2]]
# country spend trials
# 1 canada 1459 3117
# 2 uk 910 1967
# 3 usa 1248 2660
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加