18

Rの「by」関数を使用してデータフレームを切り刻み、次のようにさまざまな部分に関数を適用しています。

pairwise.compare <- function(x) {
Nright <- ...
Nwrong <- ...
Ntied <- ...
return(c(Nright=Nright, Nwrong=Nwrong, Ntied=Ntied))
}
Z.by <- by(rankings, INDICES=list(rankings$Rater, rankings$Class), FUN=pairwise.compare)

結果(Z.by)は次のようになります。

: 4 
: 357 
Nright Nwrong Ntied
     3      0     0
------------------------------------------------------------
: 8 
: 357 
NULL
------------------------------------------------------------
: 10 
: 470 
Nright Nwrong Ntied
     3      4     1 
------------------------------------------------------------ 
: 11 
: 470 
Nright Nwrong Ntied
    12      4     1

私が望むのは、この結果をデータフレーム(NULLエントリが存在しない)に変換して、次のようにすることです。

  Rater Class Nright Nwrong Ntied
1     4   357      3      0     0
2    10   470      3      4     1
3    11   470     12      4     1

それ、どうやったら出来るの?

4

5 に答える 5

19

このby関数はリストを返すので、次のようなことができます。

data.frame(do.call("rbind", by(x, column, mean)))
于 2010-04-12T02:55:45.633 に答える
6

byの代わりにplyrパッケージでddplyを使用することを検討してください。データフレームに列を追加する作業を処理します。

于 2010-04-14T19:50:48.467 に答える
4

古いスレッドですが、このトピックを検索する人は誰でも:

analysis = by(...)
data.frame(t(vapply(analysis,unlist,unlist(analysis[[1]]))))

unlist()出力の要素by()(この場合はanalysis)を受け取り、名前付きベクトルとして表現します。 vapply()のすべての要素のリストを解除しanalysis、結果を出力します。出力タイプを知るには、ダミーの引数が必要です。これが何のためにあるのかを知るanalysis[[1]]ためです。可能であれば、分析が空ではないというチェックを追加する必要があるかもしれません。各出力は列になるためt()、各分析エントリが行になる目的の方向に転置します。

于 2014-02-17T22:34:21.773 に答える
3

これは、rbind()を使用するシェーンのソリューションを拡張するだけでなく、グループを識別する列を追加し、NULLグループを削除します。これは質問で要求された2つの機能です。基本パッケージ関数を使用することにより、plyrなどの他の依存関係は必要ありません。

simplify_by_output = function(by_output) {
    null_ind = unlist(lapply(by_output, is.null))  # by() returns NULL for combinations of grouping variables for which there are no data. rbind() ignores those, so you have to keep track of them.
    by_df = do.call(rbind, by_output)  # Combine the results into a data frame.
    return(cbind(expand.grid(dimnames(by_output))[!null_ind, ], by_df))  # Add columns identifying groups, discarding names of groups for which no data exist.
}
于 2015-06-17T18:15:01.580 に答える
3

私はします

x = by(data, list(data$x, data$y), function(d) whatever(d))
array(x, dim(x), dimnames(x))
于 2016-09-19T11:44:34.037 に答える