Назначьте столбец 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
}

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


person mmann1123    schedule 16.05.2012    source источник
comment
Это очень сбивает с толку то, о чем вы просите. Не могли бы вы опубликовать то, как вы ожидаете, будет выглядеть результат?   -  person Tyler Rinker    schedule 16.05.2012


Ответы (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)

person Brian Diggs    schedule 17.05.2012
comment
Это очень помогает. да. A не может быть пустым до for loop. - person Nick Dong; 17.08.2017

Может быть, ты хочешь этого:

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> 

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

person Dirk Eddelbuettel    schedule 16.05.2012
comment
Спасибо за ответ. Я только что пояснил, что искал. - person mmann1123; 16.05.2012
comment
Просто назначьте четыре столбца в начале, а затем имена, когда / где / как вы хотите. Мой ответ уже показывает вам colnames(A), вы также можете просто назначить colnames(A)[3:4] или любое другое допустимое выражение. - person Dirk Eddelbuettel; 16.05.2012

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

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
person Tyler Rinker    schedule 16.05.2012