R — использовать rbind для нескольких переменных с похожими именами

У меня есть много переменных, которые я создал с помощью такого кода:

for (i in 1:10) {
    assign(paste0("variable", i), i )}

Теперь мне нужно использовать rbind для переменных, чтобы объединить их. Я пробовал что-то вроде этого безрезультатно:

rbind(assign(paste0("variable", 1:10)))

Любые предложения о том, что делать?


person bill999    schedule 29.09.2013    source источник


Ответы (2)


Это неправильный способ обработки связанных элементов. Лучше использовать список или фрейм данных, но со временем вы, вероятно, поймете, почему. На данный момент:

do.matrix <- do.call(rbind, lapply( ls(patt="variable"), get) )

Or:

do.matrix <- do.call(rbind, lapply( paste0("variable", 1:10) , get) )
person IRTFM    schedule 29.09.2013
comment
Это работает, но только если у меня нет других переменных с таким же шаблоном. Например, если в моем исходном коде я сейчас задаю цикл for до 1000, а затем устанавливаю его обратно до 10, переменная do.matrix будет иметь слишком много строк. - person bill999; 29.09.2013
comment
Спасибо, @DWin. Ваше продолжение моего комментария было правильным. Я прошу прощения. И спасибо за эту дополнительную строку кода. Это то, что мне нужно. - person bill999; 01.10.2013

Я хотел бы добавить еще один способ объединить несколько фреймов данных с динамическими именами. Это будет достигнуто с помощью mget и bind_rows из dplyr.

# 3 Data frames are created
TXN_MONTH_01 <- data.frame(a = 1:10, b = 101:110)

TXN_MONTH_02 <- data.frame(a = 11:20, b = 111:120)

TXN_MONTH_03 <- data.frame(a = 21:30, b = 121:130)

#create a list using dynamic names of dataframes
z <- as.list(mget(paste("TXN_MONTH_0", 1:3, sep="")))
library(dplyr)
#now call bind rows
bind_rows(z)
#    a   b
#1   1 101
#2   2 102
#3   3 103
#4   4 104
#5   5 105
#.....
#.....
#25 25 125
#26 26 126
#27 27 127
#28 28 128
#29 29 129
#30 30 130
person MKR    schedule 03.02.2018