Объединить несколько векторов в кадр данных - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть data.frame df, около 300 отдельных числовых векторов и вектор символов, включая имена всех 300 векторов.

allNames
 [1] "x.1"  "x.2"  "x.3"  "x.4"  "x.5"  "x.6"  "x.7"  "x.8"  "x.9"  "x.10" ...

Я хотел бы объединить все эти векторы сdata.frame df.Мое рабочее решение:

for (name in allNames){
  if( length(get(names)) == nrow(df)){
    df = data.frame(df, get(name))
    names(df)[ncol(df)] = paste(name)
  }
}

Есть ли более эффективный способ объединить эти векторы с df?(Без использования цикла или применения, с лучшим распределением памяти и более быстрой обработкой)

1 Ответ

0 голосов
/ 22 февраля 2019

Да, есть более простой подход.Вот воспроизводимый пример:

df = data.frame(abc = "a", def = "b")
x1 = 1
x2 = 2
x3 = 3
allNames = c("x1", "x2", "x3")

df2 = cbind(df, do.call(cbind, mget(allNames, envir = .GlobalEnv)))

df2
# abc def x1 x2 x3
#1   a   b  1  2  3

str(df2)

#'data.frame':  1 obs. of  5 variables:
# $ abc: Factor w/ 1 level "a": 1
# $ def: Factor w/ 1 level "b": 1
# $ x1 : num 1
# $ x2 : num 2
# $ x3 : num 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...