55

dfすでに多数のデータ列を持つデータフレームがあります。namevector文字列でいっぱいのベクトル があります。dfからの列の名前で空の列を追加する必要がありますnamevector

この for ループで列を追加しようとしており、 の各文字列を繰り返し処理していますnamevector

for (i in length(namevector)) {
  df[, i] <- NA
}

しかし、このエラーが残っています:

[<-.data.frame( , , i, 値 = NA) のエラー*tmp*: 新しい列は既存の列の後に穴を残す

または、正しい名前で空のデータフレームを作成しcbind、2 つのデータフレームを一緒に作成することを考えましたが、これをコーディングする方法がわかりません。

これを解決するにはどうすればよいですか?

4

4 に答える 4

79

コードの問題は次の行にあります。

for(i in length(namevector))

自問する必要がありlength(namevector)ます。1つの数字です。だから本質的にあなたは言っている:

for(i in 11)
df[,i] <- NA

またはもっと簡単に:

df[,11] <- NA

そのため、エラーが発生します。あなたが望むのは:

for(i in namevector)
    df[,i] <- NA

またはもっと簡単に:

df[,namevector] <- NA
于 2013-08-13T17:10:14.650 に答える
27
set.seed(1)
example <- data.frame(col1 = rnorm(10, 0, 1), col2 = rnorm(10, 2, 3))
namevector <- c("col3", "col4")
example[ , namevector] <- NA

example
#          col1       col2 col3 col4
# 1  -0.6264538  6.5353435   NA   NA
# 2   0.1836433  3.1695297   NA   NA
# 3  -0.8356286  0.1362783   NA   NA
# 4   1.5952808 -4.6440997   NA   NA
# 5   0.3295078  5.3747928   NA   NA
# 6  -0.8204684  1.8651992   NA   NA
# 7   0.4874291  1.9514292   NA   NA
# 8   0.7383247  4.8315086   NA   NA
# 9   0.5757814  4.4636636   NA   NA
# 10 -0.3053884  3.7817040   NA   NA
于 2013-08-13T16:57:46.877 に答える
-2

多分

df <- do.call("cbind", list(df, rep(list(NA),length(namevector))))
colnames(df)[-1*(1:(ncol(df) - length(namevector)))] <- namevector
于 2013-08-13T16:53:45.733 に答える