Подтвердить что ты не робот

R - добавить пустые столбцы в dataframe с указанными именами из вектора

У меня есть dataframe, df, с уже несколькими столбцами данных. У меня есть вектор, namevector, полный строк. Мне нужны пустые столбцы, добавленные в df, с именами столбцов из namevector.

Я пытаюсь добавить столбцы с этим циклом for, итерации по каждой строке в namevector.

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

но я остался с этой ошибкой.

Ошибка в [<-.data.frame (*tmp*, i, value = NA): новые столбцы оставят дыры после существующих столбцов

В качестве альтернативы, я подумал о создании пустого фрейма с правильными именами, а затем объединил два файла данных, но не уверен, как это сделать.

Как я могу это решить?

4b9b3361

Ответ 1

Проблема с вашим кодом находится в строке:

for(i in length(namevector))

Вам нужно спросить себя: что такое length(namevector)? Это один номер. Итак, вы говорите:

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

Или проще:

df[,11] <- NA

Это, почему вы получаете сообщение об ошибке. Вы хотите:

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

Или проще:

df[,namevector] <- NA

Ответ 2

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

Ответ 3

Просто давайте, как показано ниже, для меня

dataframe [, "newName" ] < - NA

Обязательно добавьте "" для новой строки имени.

Ответ 4

Возможно

df <- do.call("cbind", list(df, rep(list(NA),length(namevector))))
colnames(df)[-1*(1:(ncol(df) - length(namevector)))] <- namevector