2015-06-03 3 views
0

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

Вот функция:

clean_data <- function(show_df){ 
    show_data <- show_df[,c(1:2,7)] 
    colnames(show_data) <- c("Week", "WeeklyGross", "AvgTicketPrice") 

    #turns WeeklyGross into Numeric values 
    show_data$WeeklyGross <- gsub('[^a-zA-Z0-9.]', '', show_data$WeeklyGross) 
    show_data$WeeklyGross <- as.numeric(show_data$WeeklyGross) 

    #turns AvgTicketPrice into Numeric values 
    show_data$AvgTicketPrice <- gsub('[^a-zA-Z0-9.]', '', show_data$AvgTicketPrice) 
    show_data$AvgTicketPrice <- as.numeric(show_data$AvgTicketPrice) 

    show_data 
} 

И вот мой код, когда я пытаюсь перебирать список моих кадров данных с помощью функции:

df.list <- list(atw_df, cly_df, gent_df, kin_df, 
         mo_df,on_df, van_df, war_df) 
new_list <- list() 
for (i in seq(df.list)){ 
    new_list <- clean_data(i) 
} 

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

EDIT: сделал некоторые изменения коды, я теперь получаю неправильное количество ошибок размеров в show_df [C (1: 2, 7)]

EDIT2: больше изменений, внесенных в цикл, по-прежнему получать такое же сообщение об ошибке.

+0

Просьба воспроизводимый пример. – user227710

+0

Ваша функция не возвращает подмножество данных. Попробуйте добавить 'show_data' после своей последней строки. Также вы не должны использовать 'i' дважды в своем цикле for. Создайте новый список и назначьте ему новый df. – Molx

+0

Еще два комментария: 1. Ошибка в том, что вы не отправляете df в 'clean_data', вы отправляете только' i' (сначала, вы делаете это правильно) Удалите строку 'clean_data (i)'. 2. Если вы создадите список внутри цикла for, вы будете стирать его каждый раз, когда он будет запущен. Создайте его снаружи и просто добавьте чистые dfs внутри как новый элемент ('new_list <- clean_data (i)'). – Molx

ответ

1

После того, как у вас есть функции, и список, просто сделать

new_list <- lapply(df.list, clean_data) 

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

Таким образом, вся ваша "петля" становится

df.list <- list(atw_df, cly_df, gent_df, kin_df, 
       mo_df,on_df, van_df, war_df) 

new_list <- lapply(df.list, clean_data) 
Смежные вопросы