У меня очень простой вопрос о lapply. Я перехожу из STATA в R, и я думаю, что есть очень простая концепция, что я не собираюсь зацикливаться на R. Но я читал об этом весь день и не могу найти разумный способ сделать это очень просто. ,возвращение из списка в data.frame после lapply
У меня есть три фрейма данных DF1, df2 и DF3, что все имеют одинаковые имена столбцов, в том же порядке, и т.д.
Я хочу переименовать их все столбцы сразу.
Я поставил кадры данных в списке:
dflist <- list(df1, df2, df3)
То, что я хочу, чтобы новые имена быть:
varlist <- c("newname1", "newname2", "newname3")
Написать функцию, которая заменяет имена с теми, в списке переменных, и lapply его над кадрами данных
ChangeNames <- function(x) {
names(x) <- varlist
return(x)
}
dflist <- lapply(dflist, ChangeNames)
Итак, насколько я понимаю, R изменил имена копий кадры данных, которые я ввел в список, но не сами исходные кадры данных. Я хочу, чтобы сами кадры данных были переименованы, а не элементы списка (которые попали в список).
Теперь я могу пойти
df1 <- as.data.frame(dflist[1])
df2 <- as.data.frame(dflist[2])
df2 <- as.data.frame(dflist[3])
Но это кажется странным. Вам нужен цикл, чтобы вернуть элементы цикла?
В принципе: после того, как вы поместили некоторые кадры данных в список и запустили свою функцию на них через lapply, как вы можете вернуть их из списка, не возвращаясь обратно на квадрат?
Я думаю, что больше R путь об этом было бы связать данные 3 кадра вместе, используя что-то вроде 'bigdf <- dplyr :: bind_rows (dflist, .id = "dfid") ', а затем подмножество в столбце' dfid' при необходимости. – Nick
Если структура data.frames имеет аналогичную структуру, рекомендуется сохранить их в списке и работать с ними оттуда.См. [Этот пост] (http://stackoverflow.com/questions/17499013/how-do-i-make-a-list-of-data-frames), в частности, ответ gregor о том, почему это хорошая техника. – lmo
Спасибо Имо за то, что направил меня на этот ответ от gregor. Очень полезно. – VaguelySteamy