2012-05-11 17 views
3

に作成する方法はありますか?サイズM×NのデータフレームをR

私はこれにこだわっている:

m <- 10 # nof row 
n <- 5 # nof column 

# We will fill each cell with '0' 

all <-c() 
for (i in 1:m) { 
    row_i <- c(rep(0,n)) 
    all <- c(all,row_i) 
} 

のみ出力として1行を作成し、どの。

+1

「nof_range」は何ですか? – mdsumner

+0

@mdsumner:申し訳ありませんが、私はそれを修正しました。 – neversaint

+0

以下の答えが最適ですが、 'rbind'を' c 'ではなく 'all < - rbind(all、row_i)'を使用するとコードが動作します –

答えて

7

なぜ行列を使用しないのですか? data.framesは、さまざまな種類の列を格納するためのものです。だから、

m = 10 
n = 5 
mat = matrix(0, nrow = m, ncol = n) 

あなたが本当にdata.frameをしたい場合は、1に強制 - 列名は、単純にデフォルトになります。

dat = as.data.frame(mat) 
names(dat) 
[1] "V1" "V2" "V3" "V4" "V5" 

あなたのアプローチの問題は、あなたが単に追加していることですあなたが望むディメンションを無視して、値を順番に並べ替えます。このようにすることはできますが、データを増やすのは良い考えではなく、上記のようにすべてを先に割り当てることをお勧めします。また、これはとにかく行列になります。これはあなたが使うべきだと思います。

警告:コードが間違っています!

m <- 10 # nof row 
n <- 5 # nof column 

all <- NULL 
for (i in 1:m) { 
    row_i <- c(rep(0,n)) 
    all <- rbind(all,row_i) 
} 
4

これにより、data.frameはゼロで埋められます。

as.data.frame(lapply(structure(.Data=1:N,.Names=1:N),function(x) numeric(M))) 
+0

mdsummerソリューションはよりエレガントですが、私の解決策を拡張して列のクラス。 –

関連する問題