2016-09-05 5 views
0

でDATAFRAMEするなぜこの作品エラーはゼロ行

# add ONE column to dataframe with zero rows 

x <- data.frame(a=character(0)) 
x["b"] <- character(0) 

、これはそうではありませんか?

# add SEVERAL columns to dataframe with zero rows 

x <- data.frame(a=character(0)) 
x[c("b", "c")] <- character(0) 

error in value[[jvseq[[jjj]]]] : index out of limits [... freely translated] 

注意、我々は非ゼロの行を持っている場合、これは、完全に大丈夫であること。

x <- data.frame(a=1) 
x["b"] <- NA 

x <- data.frame(a=1) 
x[c("b", "c")] <- NA 

そして、何ゼロ行のデータフレームに複数の列を追加するための簡単な選択肢でしょうか?help("[.data.frame")から

+2

'CBIND(X、B =文字(0)、C =文字(0))'。 – r2evans

+0

多くの列に対して、 'cbind(x、as.data.frame(matrix、0、ncol = 42、nrow = 0)))' –

+0

残念ながら、これは私があらかじめわかっていないので、私には役に立ちません。とにかく、私はもちろん、次のようにループすることができます: 'for(m in c(" a "、" b "))x [[m]] < - character(0)' –

答えて

1

データフレームは、いくつかのモードでインデックスを作成することができます。 [および[[x [i]]またはx [[i]]の単一のベクトルインデックスを持つ を使用すると、リストのようにデータフレーム がインデックスされます。 help("[")から

再帰(リストなど)によって

インデックスオブジェクト原子ベクターと同様であり、指定された要素(複数可)のリストを選択します。

したがって、あなたはリストを渡す(またはdata.frame)実行する必要があります。

x <- data.frame(a=character(0)) 
x[c("b", "c")] <- list(character(0), character(0)) 
str(x) 
#'data.frame': 0 obs. of 3 variables: 
# $ a: Factor w/ 0 levels: 
# $ b: chr 
# $ c: chr 
+0

さて、私はより良いRTFMです。素敵な、ありがとう:D –

関連する問題