3

私はdata.frames(同じ数の列、異なる数の行)の巨大なリストを持っています。回避することを学んだforループの代わりに、applyを使用して、各リスト要素の特定の列の平均値を作成することに成功しました

t2<-lapply(t1, function(x) cbind(x,rowMeans(x[,c("ColumnX","ColumnY","ColumnZ")])))

私が今立ち往生している問題は、新しい列名です。「rowMeans(x[,c("ColumnX","ColumnY","ColumnZ")])」です。

すべてのリスト要素に対してこれを変更するにはどうすればよいですか? 私の貧弱な「ラップリー」の知識は、このタスクには十分ではありませんでした.

4

2 に答える 2

4

これを行うには2つの方法があり、実際にはcbind関数ではなく関数に関係していlapplyます。

cbind(x,DesiredName = rowMeans(x[,...]))

または、cbindした後:

> names(x)
[1] "Column X" "Column Y" "Column Z" "rowMeans(x[,...])"
> names(x)[4]
"rowMeans(x[,...])"
> names(x)[4] <- "DesiredName" ###Assign a name to the fourth column
> names(x)
[1] "Column X" "Column Y" "Column Z" "DesiredName"

applyこれは明らかに長い道のりですが、またはcbindプロセス中に名前を付けるのを忘れた場合に役立ちます。

于 2012-10-29T17:19:16.927 に答える
1

たとえば、colnameを追加するだけですRowMeans

t2 <-lapply(t1, function(x) cbind(x,RowMeans=rowMeans(x[,c("ColumnX","ColumnY","ColumnZ")])))

実際には、この代替手段を使用して目標を達成できます。

lapply(t1, function(x) transform(x,RowMeans=rowMeans(x[,c("ColumnX","ColumnY","ColumnZ")])))

RowMeans各行の平均を含む新しい変数の名前は次のとおりです。

于 2012-10-29T17:16:02.497 に答える