0

既存の列の値に基づいて、3つの異なる列の3つの値をマトリックスに追加する方法を探しています。

experiment = rbind(1,1,1,2,2,2,3,3,3)
newColumns = matrix(NA,dim(experiment)[1],3) # make 3 columns of length experiment filled with NA
experiment = cbind(experiment,newColumns) # add new columns to the experimental data
experiment = data.frame(experiment)    
experiment[experiment[,1]==1,2:4] = cbind(0,1,2) # add 3 columns at once
experiment$new[experiment[,1]==2] = 5 # add a single column
print(experiment)

  X1 X2 X3 X4 new
1  1  0  0  0  NA
2  1  1  1  1  NA
3  1  2  2  2  NA
4  2 NA NA NA   5
5  2 NA NA NA   5
6  2 NA NA NA   5
7  3 NA NA NA  NA
8  3 NA NA NA  NA
9  3 NA NA NA  NA

ただし、これは新しい列を間違った方法で埋めます。列2をすべて0にし、列3をすべて1にし、列4をすべて3にします。

一度に1列ずつ実行できることはわかっていますが、実際のデータセットは非常に大きいため、これは私の推奨されるソリューションではありません。列の範囲を大きくして、例の3つの値に値を追加するだけで、簡単に列を追加できるようにしたいと思います。

4

1 に答える 1

1

これの代わりに:

experiment[experiment[,1]==1,2:4] = cbind(0,1,2) # add 3 columns at once

これを試して:

experiment[experiment[,1] == 1, 2:4] <- rep(c(0:2), each=3)

問題は、9つのエントリを埋めるために3つの値(0、1、2)を指定したことです。値はデフォルトで列ごとに入力されます。したがって、最初の列は0、1、2で埋められ、値はリサイクルされます。したがって、再び0,1,2と0,1,2になります。が必要なので0,0,0,1,1,1,2,2,2、を使用して明示的に生成する必要がありますrep(0:2, each=3)(はeach、上記のデータを生成するタスクを実行します)。

于 2013-03-26T16:22:12.377 に答える