Использование функции переименования с пастой в a для l oop в R - PullRequest
1 голос
/ 26 мая 2020

Я кодирую a для l oop, чтобы импортировать 6 фреймов данных и применить к ним определенные процедуры.

b = 6
for (i in 1:b) {
  a = as.numeric(20200518)
  d = as.Date("2020-05-18")

  assign(paste("vacantes_", a + i, sep = ""), read_excel(paste("Favorites/Tito/01. aaaaaa/aaaaaaa 20/05. Data/
         01. aa/01. Módulo aaaaaaaaaaa/Vacante_inconsistencias_", a + i, ".xlsx", sep = ""),col_names = TRUE))

  assign(paste("vacantes_", a + i, "_llenado", sep = ""), get(paste("vacantes_", a + i, sep = "")) %>% 
         select("ddd", "uuuu", Llenó", "cod") %>% 
         group_by(ddd, uuuu, `Llenó`) %>% summarise(Cantidad = n()))

  assign(paste("vacantes_", a + i, "_llenado1", sep = ""), 
         dcast(get(paste("vacantes_", a + i, "_llenado", sep = "")), ddd + uuuu ~ `Llenó`, sum) %>% 
         mutate(Fecha = as.Date(d + i)) %>% select("Fecha", "ddd", "uuuu", "NO", "SÍ"))

  if(i == b){
    rm(a, b, i, d)
  }
}

В последнем процессе Cast (третья функция) я хотел переименовать два столбца в каждом фрейме данных, поэтому я добавляю последнюю строку к этой части кода:

## Cast  
assign(paste("vacantes_", a + i, "_llenado1", sep = ""), 
    dcast(get(paste("vacantes_", a + i, "_llenado", sep = "")), ddd + uuuu ~ `Llenó`, sum) %>% 
    mutate(Fecha = as.Date(d + i)) %>% select("Fecha", "ddd", "uuuu", "NO", "SÍ") %>% 
    rename(paste("NO_", a + 1, sep ="") = NO, paste("SI_", a + 1, sep ="") = SÍ))

Функция переименования приводит к тому, что for l oop не работает вообще. Я получил:

Error: inesperado '=' in:
" i, "_llenado1", sep = ""), dcast(get(paste("vacantes_", a + i, "_llenado", sep = "")), ddd + uuuu ~ `Llenó`, sum) %>% 
    mutate(Fecha = as.Date(d + i)) %>% select("Fecha", "ddd", "uuuu", "NO", "SÍ")) %>% rename_(paste("NO_", a + 1, sep ="") ="

Я попытался добавить rename(get(paste("NO_", a + 1, sep ="")) = NO, get(paste("SI_", a + 1, sep ="")) = SÍ), но это тоже не сработало.

Чтобы уточнить, я удалил строку rename и строку l oop работал так, как я хотел, так что проблема в этой строке кода. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 26 мая 2020

Если мы используем paste, то можно назначить (:=) при оценке (!!)

library(dplyr)
head(mtcars) %>% 
      rename(!!paste0('NO_', 2) := mpg, 'SI' = carb)
#                  NO_2 cyl disp  hp drat    wt  qsec vs am gear SI
#Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4  4
#Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4  4
#Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4  1
#Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3  1
#Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3  2
#Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3  1
0 голосов
/ 26 мая 2020

Вы должны добавить образец ваших данных, например, с помощью dput. Не было бы проще прочитать все эти объекты данных в списке:

path <- "./files"
files <- list.files(path = path,
                    full.names = TRUE,
                    all.files = FALSE)
files <- files[!file.info(files)$isdir]

data <- lapply(files,
               function(x) {
                 read_excel(x, ,col_names = TRUE)
               })

А затем применить любое необходимое преобразование данных? Вы можете сделать это, используя lapply в сочетании с вашей функцией преобразования. Или вы можете bind_rows собрать все вместе и использовать свои dplyr глаголы для преобразования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...