Применить функцию к столбцу Specifi c в списке R - PullRequest
1 голос
/ 20 января 2020

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

dflist <- list(data.frame(number = 1:10, name = 1:10),
               data.frame(number = 2:15, name = 1:14))

dflist <- lapply(dflist, function(x){
  x$name <- digest(x$name, algo = "sha256")
  return(x)
  })

#OR this

dflist <- lapply(dflist, function(x) {
  x %>% mutate_each(funs(digest(.,algo = "sha256")), "name")
})

Оба они дают одинаковый результат - просто каждая строка в столбце name имеет одинаковое точное значение. Функция digest() работает, но возвращает только значение первой строки в каждой строке.

Я также пробовал:

dflist <- lapply(dflist, function(x) {
  digest(x[,"name"], algo = "sha256")
  })

Но это просто возвращает только первое значение из каждый фрейм данных в списке.

Любой совет будет высоко ценится!

1 Ответ

4 голосов
/ 20 января 2020

digest не векторизовано

dflist1 <- lapply(dflist, function(x) {
      x$name <- Vectorize(digest::digest)(x$name, algo = "sha256")
     x
   })

Или используйте его в transform

dflist1 <- lapply(dflist, transform, name = Vectorize(digest::digest)(name))
...