4

多くの場合、いくつかの変数でデータ フレームをグループ化した後、同じ変数でグループ化された別のデータ フレームのデータを使用する関数を適用したいと考えています。私が見つけた最善の解決策は、次のように関数内でsemi_joinを使用することです。

d1 <- data.frame(model = c(1,1,2,2), x = runif(4) )
d2 <- data.frame(model=c(1,1,1,2,2,2), y = runif(6) )

myfun <- function(df1, df2) {
   subsetdf2 <- semi_join(df2, df1)
   data.frame(z = sum(d1$x) - sum(subsetdf2$y)) # trivial manipulation just to exemplify
}

d1 %>% group_by(model) %>% do(myfun(., d2))

問題は、semi_joinが「Joining by...」メッセージを返し、この関数を使用してブートストラップを実行していると、コンソールを折りたたむ多くのメッセージが表示されることです。では、結合の冗長性を減らす方法はありますか? このようなことを行うためのよりエレガントな方法を知っていますか?

PS私は数年前にplyrについて同様の質問をしました:ddplyで指定された変数による関数内のサブセット

4

2 に答える 2

2

'Joining by:' ステートメントを停止するだけの場合は、by引数で結合する列を指定するだけです。

例えば:

semi_join(d2, d1, by="model")

編集 - 使用する代わりにsemi_join、ソリューションを使用できますbase。関数はグループごとにデータを渡すためgroup_by、単純なインデックス ステートメントを使用してフィルター処理できます。これにより、追加のパラメーターが不要になります。 これは現在、対象の列が最初の列であることも前提としています。

myfun <- function(df1, df2) {
  subsetdf2 <- df2[df2[,1] %in% unique(df1[,1]),]
  data.frame(z = sum(df1$x) - sum(subsetdf2$y)) # trivial manipulation just to exemplify
}
于 2015-02-10T14:54:54.143 に答える