R-эквивалент для цикла Stach над значениями - PullRequest
0 голосов
/ 25 сентября 2019

Я немного знаком с циклами R (например, применять семейство) и функциями записи.Однако я не могу найти функцию, которая работает как функция цикла foreach Stata над значениями.

Например, скажем, что я хотел прочитать в нескольких файлах Excel, по одному на каждый год, а затем сохранить каждый файл Excel как отдельный фрейм данных, я мог бы использовать цикл Stach в Stata - например:

foreach i = 2000/2010 {
data_`i’ = import excel using excel_file_`i’.xlsx
}

Кто-нибудь знает эквивалентную функцию для R?

Спасибо за ваш вклад.

Ответы [ 3 ]

0 голосов
/ 25 сентября 2019

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

library(readxl)

for (i in vector_of_is) {
  file_name <- paste0("excel_file_", i, ".xlsx")
  df_name <- paste0("data_", i)
  assign(df_name, read_excel(file_name, sheet = ...))
}
0 голосов
/ 25 сентября 2019

Для чтения файлов Excel в r-project я рекомендую вам readxl библиотеку.Это очень легко установить.С консоли R напишите install.packages("readxl")

После установки пакета вы можете использовать его.

Для решения вашей конкретной проблемы используйте следующий код:

library("readxl")

for(i in 2000:2010){
  # make the excel file, eg: excel_file_2000.xlsx
  excel_file_name <- paste0("excel_file_",i,".xlsx")
  # Read the data and store it in data variable
  data <- read_excel(excel_file_name)
  # Make the data.frame name eg: data_2000
  data_frame_name <- paste0("data_",i)
  # Store the data in variable data_XXXX
  assign(data_frame_name,data)
}

Надеюсь, это поможет вам

0 голосов
/ 25 сентября 2019

В R базовый цикл for работает подобно циклу foreach в большинстве других языков.В этом случае может быть проще использовать lapply вызов, но для иллюстрации вот версия цикла for.

library(readxl) #<= package
years <- 2000:2010
data <- vector("list", length(years))
for( i in seq_along(years) ) {
    data[[i]] <- read_excel(paste0("excel_file_", years[i], ".xlsx"), sheet = 1)
}

lapply версия:

library(readxl)
data <- lapply(2000:2011, function(x) read_excel(paste0("excel_file_", x, ".xlsx"), sheet = 1))

Естьмного пакетов.Я бы предложил использовать Google или поиск по SO для этих типов вопросов.На них уже отвечали в похожих настройках.

Обратите внимание, что data теперь представляет собой список data.frame подобных объектов, называемый tibbles.Доступ к ним можно получить, используя data[[1]], заменяя 1 конкретным набором данных, к которому вы хотите получить доступ.

...