Список фреймов данных, в которых тип переменной столбца должен быть изменен с символьного на числовой в R - PullRequest
1 голос
/ 13 июня 2019

Я создал вложенный список фреймов данных с помощью функций read.csv и lapply.Этот вложенный список фреймов данных содержит первый столбец в виде product и остальные 239 столбцов для данных по различным странам.Все числа представлены в символьном формате, который я хочу преобразовать в числовую форму для каждого кадра данных в списке.Я использовал следующий код.Но он удаляет столбец product [1] из каждого кадра данных и отображает только [2:240] остальные столбцы.Как предотвратить удаление столбца product?

files <- list.files(path = "D:\\R34\\casia3\\data_kaz\\export\\", pattern = "*.csv")

myfiles <- lapply(files, function(x) {
  df <- read.csv(x, strip.white = T, stringsAsFactors = F, sep = ",")
  df$ID <- as.character(x)
  return(df)
})


myfiles <- lapply(myfiles, function(x) lapply(x[2:240], as.numeric))

Ответы [ 2 ]

1 голос
/ 13 июня 2019

Мы можем использовать type.convert для автоматического преобразования класса

lstdat <- lapply(lstdat, function(x) {x[] <- lapply(x,
             type.convert, as.is = TRUE); x})
1 голос
/ 13 июня 2019

Попробуйте сделать

myfiles <- lapply(myfiles, function(x) {x[2:240] <- lapply(x[2:240], as.numeric);x})

Поскольку вы применяете функцию as.numeric к столбцу 2:240, возвращаются только те из них. Мы можем применить функцию к этим выбранным столбцам и вернуть обратно весь фрейм данных из внутреннего вызова lapply.


Если вы заинтересованы, вы также можете рассмотреть эту tidyverse альтернативу

library(tidyverse)
myfiles <- map(myfiles,. %>% mutate_at(2:240, as.numeric))
...