1

私が実行しているプログラムは、次のコードを使用して 3 つのデータ フレームを作成します。

datuniqueNDC <- data.frame(lapply(datlist, function(x) length(unique(x$NDC))))
datuniquePID <- data.frame(lapply(datlist, function(x) length(unique(x$PAYERID)))
datlengthNDC <- data.frame(lapply(datlist, function(x) length(x$NDC)))

次のような出力があります。

  X182L X178L X76L
1   182   178   76

  X34L X31L X7L
1   34   31   7

  X10674L X10021L X653L
1   10674   10021   653

私がやろうとしているのは、行を 1 つのデータ フレームにまとめて、目的の結果を次のようにすることです。

        X      Y    Z
1     182    178   76
2      34     31    7
3   10674  10021  653

ただし、すべての列の名前が異なるため、 rbind コマンドは機能しません。上記の各変数を作成した後に colnames コマンドを使用して動作させることができますが、apply コマンドのいずれかを使用するか、または同様のものを使用してこれを達成するためのより効率的な方法があるはずです。助けてくれてありがとう。

4

2 に答える 2

1

呼び出しで使用する関数lapplyはスカラーであるため、 を使用すると簡単になりますsapplysapplyあなたができるベクトルを返しますrbind

datuniqueNDC <- sapply(datlist, function(x) length(unique(x$NDC)))
datuniquePID <- sapply(datlist, function(x) length(unique(x$PAYERID))
datlengthNDC <- sapply(datlist, function(x) length(x$NDC))
dat <- as.data.frame(rbind(datuniqueNDC,datuniquePID,datlengthNDC))
names(dat) <- c("x", "y", "z")

別の解決策は、3 つの統計情報すべてを 1 つの関数で計算することです。

dat <- as.data.frame(sapply(datlist, function(x) {
    c(length(unique(x$NDC)), length(unique(x$PAYERID), length(x$NDC))
}))
names(dat) <- c("x", "y", "z")
于 2013-02-13T15:10:25.540 に答える
1

evreything は数値のように見えるため、1 つの方法は次のようになります。

mylist <- list(dat1,dat2,dat3) 
# assuming your three data.frames are dat1:dat3 respectively

 do.call("rbind",lapply(mylist, as.matrix))
#     X182L X178L X76L
#[1,]   182   178   76
#[2,]    34    31    7
#[3,] 10674 10021  653

データはデータフレームではなくマトリックスであるため、基本的にこれは機能します。名前を変更する必要があるのは最後に 1 回だけです。

于 2013-02-13T14:43:27.303 に答える