lapply и mutate_all / для циклов - PullRequest
0 голосов
/ 06 ноября 2019

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

После загрузки всех моих необработанных фреймов данных с помощью lapply я хочу выполнить итерацию по всем столбцам для выполнения такой операции (т. Е. Мутировать (df, df $ my_column = df $ my_column / sum (df $ my_column))).

Мой код:

samplelist <- list(df1 = "path to df1",
                 df2 = "path to df2",
                 df3 = "path to df3")


samples <- lapply(names(samplelist),function(processing){
  aux <- read.csv(samplelist[[processing]], header = T, sep = "") # works
  for (i in colnames(aux)){
    mutate(aux, aux[[i]]=aux[[i]]/sum(aux[[i]]))
  }
})

Но не работает (неожиданно "=" и позже неожиданно "{"), поэтому я попытался использовать mutate_all из dplyr, но яЯ не знаю, как передать это

samplelist <- list(df1 = "path to df1",
                     df2 = "path to df2",
                     df3 = "path to df3")


    samples <- lapply(names(samplelist),function(processing){
      aux <- read.csv(samplelist[[processing]], header = T, sep = "") %>% mutate_all(what should I write there?)
    })

Я мог бы просто добавить новую строку и использовать mutate_all, но все же я не могу понять, какие аргументы дать. Если вы знаете и другие способы сделать это хорошо.

Большое спасибо за вашу помощь.

1 Ответ

2 голосов
/ 06 ноября 2019

Вы можете просто использовать описанную вами функцию и адаптироваться к аргументу функции. В dplyr . обозначает, в данном случае, переменную. ~ определяет формулу.

samples <- lapply(names(samplelist), function(processing){
  aux <- read.csv(samplelist[[processing]], header = T, sep = "") %>% 
    mutate_all(~./sum(.))
})

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

...