Как перебрать функцию get () в R - PullRequest
2 голосов
/ 31 марта 2020

У меня есть несколько фреймов данных с именами df_JANUARY 2020, df_FEBRUARY 2020 et c. (Я знаю, что пробелы - плохая практика в присваивании переменных, но это связано с запросом sql). И хотел бы создать функцию для перебора месяцев этих фреймов данных. Цель этого состоит в том, чтобы функция (не написанная ниже) очищала каждый df одинаково.

date <- c("JANUARY 2020", "FEBRUARY 2020") 

x <- function(date) {
     y <- get(paste0("df_", date))
} 

for(i in seq_along(date)) {
  z <- date[i]
  assign(paste0("dfclean_", date[i]), x(z))
}

Проблема в том, что когда я использую функцию get (), она проталкивает весь список, а не по одному элементу за раз. Есть ли возможность избежать этой проблемы с этой методологией или есть лучший способ подойти к этой проблеме? Любая помощь очень ценится.

Ответы [ 2 ]

2 голосов
/ 31 марта 2020

Мы можем преобразовать matrix в data.frame, а затем использовать $, поскольку matrix столбцы извлекаются с [

 x <- function(daten) {
      y <- as.data.frame(get(paste0("df_", daten)))
      y[grep("Enterprise", y$AcctType), ]

   } 


for(i in seq_along(date)) {
   z <- date[i]
     assign(paste0("dfclean_", date[i]), x(z))
  }

Мы также можем использовать mget

lst1 <- mget(paste0("df_", date))
lst1 <- lapply(lst1, function(x) subset(as.data.frame(x), 
              grepl("Enterprise",AcctType)))
names(lst1) <- sub("_", "clean_", names(lst1))
list2env(lst1, .GlobalEnv)
1 голос
/ 31 марта 2020

Я знаю, что вы не просили об этом, но как насчет того, чтобы просто переименовать все кадры данных с помощью _ вместо пробела?

Первая строка назначает все объекты в глобальной среде с помощью df в названии быть элементами списка с именем mydfs.

Вторая строка заменяет пробел на _ в именах.

Третья строка назначает все элементы списка в глобальную среду.

mydfs <- mget(ls(pattern = "df"), globalenv())
names(mydfs) <- gsub(" ","_",names(mydfs))
list2env(mydfs, env = globalenv())

Или, во втором варианте, вы можете просто использовать lapply для mydfs.

...