Назначьте столбец data.frame с именем строки в R

Я пытаюсь назначить данные для существующего кадра данных с именем, созданным в цикле. Основной пример может быть

A = data.frame(a = c(1,2,3), b=c(3,6,2))

for (i in 1:2){
    name = paste("Name",i, sep="")
    assign(name, c(6,3,2))
}

Теперь мне просто нужно выяснить, как добавить name1 и name2 к data.frame A, сохраняя при этом их назначенное имя. Я уверен, что есть простой ответ, я просто не вижу его прямо сейчас.

в конце я хотел бы закончить с

A
#a b name1 name2
#1 3 6      6
#2 6 3      3
#3 2 2      2

Но мне нужно сделать это в автоматическом режиме.

Например, если цикл for может быть адаптирован так

for (i in 1:2){
    name = paste("Name",i, sep="")
    assign(name, c(6,3,2)
    A= cbind(A, get(paste(name,i,sep="")))  # works but doesn't maintain the column name as name1 or name2 etc
}

однако это не поддерживает имена столбцов

 Tyler Rinker16 мая 2012 г., 20:06
Это очень сбивает с толку то, что вы просите. Не могли бы вы опубликовать то, что вы ожидаете, что результат будет выглядеть?

Ответы на вопрос(3)

Решение Вопроса

Другие ответы хороши, но если вы настроены на использование цикла, как у вас, то это будет работать:

A <- data.frame(a = c(1,2,3), b = c(3,6,2))

for (i in 1:2){
    A[paste("Name", i, sep="")] <- c(6,3,2)
}

который дает

> A
  a b Name1 Name2
1 1 3     6     6
2 2 6     3     3
3 3 2     2     2

С другой стороны,paste("Name", i, sep="") может быть заменено наpaste0("Name", i)

 17 авг. 2017 г., 13:07
Это очень помогает. Да.A не может быть пустым раньшеfor loop.

Может быть, вы хотите это:

R> A <- data.frame(a=c(1,2,3), b=c(3,6,2))
R> colnames(A) <- paste("Names", 1:ncol(A), sep="")
R> A
  Names1 Names2
1      1      3
2      2      6
3      3      2
R> 

но, как сказал Тайлер в комментарии, не совсем понятно, о чем вы спрашиваете.

 16 мая 2012 г., 20:23
Просто назначьте четыре столбца в начале, а затем имена, когда / где / как вы хотите. Мой ответ уже показываетcolnames(A)Вы также можете просто назначитьcolnames(A)[3:4] или любое другое допустимое выражение.
 mmann112316 мая 2012 г., 20:17
Спасибо за ответ, я только что уточнил, что искал.

Все еще не совсем уверен, чего вы пытаетесь достичь:

A = data.frame(a = c(1,2,3), b=c(3,6,2))
B <- data.frame(A, c(6, 3, 2), c(6, 3, 2))
names(B)[3:4] <- paste0("name", 1:2)
B

Который дает:

  a b name1 name2
1 1 3     6     6
2 2 6     3     3
3 3 2     2     2

Ваш ответ на вопрос