2013-04-29 2 views
0

Я работаю с несколькими кадрами данных с именами, следуя эту структуру:В R, как я могу зацикливаться на кадрах данных?

data.bzk.18 
data.bzk.19 
data.bzk.20 
data.bzk.21 

Я хотел бы использовать plyr суммировать данные и в основном выполнить следующую команду на каждом из кадров данных:

bzk.tot.18 <- plyr::count(data.bzk.18, c("BZNR")) 

Я хотел поставить петлю на все из них и придумал решение, как этот

for(i in 18:21) { 
    to <- paste("bzk.tot", i, sep = ".") 
    assign(to, i) 

    from <- paste("data.bzk", i, sep = ".") 
    assign(from, i) 

    to <- plyr::count(from, c("BZNR")) #totals 
} 

к сожалению, это не работает. Где я ошибся?

ответ

3

короткий ответ, что вместо того, чтобы:

to <- plyr::count(from, c("BZNR")) #totals 

использование:

assign(to, plyr::count(get(from), c("BZNR"))) 

и избавиться от предыдущих assign заявлений.


длинный ответ заключается в том, что вы, вероятно, не хотите так обходить его. Лучше собрать все ваши data.frames в список и перебрать по списку.

+0

Спасибо. К сожалению, это не сработало. Я получаю сообщение об ошибке «Ошибка в eval (expr, envir, enc): объект« BZNR »не найден» – radek

+1

@radek, извините за это. 'from' необходимо обернуть в' get (.) '. Ответ был обновлен. –

+1

Yhanks - это сработало! – radek

Смежные вопросы