1

tapplyandのヘルプ ページを見てきましたがby、これが適切なツールであるかどうかわかりません。たとえば、列があるデータフレームがありName,Value1,Value2、関数を適用したい場合、グループ化しfunction f(x,y) { do_something }て結果として列を持つデータフレームを取得するにはどうすればよいですか?Value1Value2NameName,f(Value1,Value2)

次のような単純なケースで、tapply を動作させることができます。

tapply(df$Name, df$value1, mean)

しかし、私の関数が入力df$value2としても取るとどうなりますか? と同じくらい単純ではありませんmeanか?つまり、私がやろうとしていることの疑似表記は次のようになります。

tapply(df$Name, c(df$value1,df$value2), function f(x,y) { x+y+bla...})

4

2 に答える 2

4

byを返しませんが、仕事をしますdata.frame

by(df, df$Name, function(X) f(X$Value1, X$Value2))

パッケージdata.tableは、この種のことに対してより適切に設定されています。

install.packages("data.table")
library(data.table)
dt = data.table(df)
dt[,f(Value1, Value2),by=Name]

探しているものを正確に返します。

于 2013-09-17T21:32:25.707 に答える
3

もチェックしてくださいplyr。例えば

require(plyr)
ddply(mtcars, .variables="cyl", .fun=mutate,
      meaningless_number = mean(mpg) + disp)

は、 と同じようにデータ フレームを返しますmtcars。追加された列meaningless_numberは、平均に個人mpgを加えたものです。列の追加、集計の表示、その他の目的でのその他の機能に使用します。cyldisp.fun = mutate.fun = summarize

この質問への回答は、一般的な *apply 知識に非常に適しています。また、この回答は素晴らしいplyrチュートリアルであることがわかりました。

于 2013-09-17T21:38:16.947 に答える