Преобразование одного элемента вложенного списка из факторов в символы - PullRequest
0 голосов
/ 23 апреля 2019

Я создал вложенный список mydata для чтения во всех файлах csv из каталога:

> temp <- list.files(pattern="*.csv")
> ls <- lapply(temp, read.csv)
> str(mydata)
List of 4
 $ :'data.frame':   51 obs. of  5 variables:
  ..$ Primary.ID : Factor w/ 862 levels "X102.034169503712_9.041775",..: 564 621 527 260 566 590 625 68 699 95 ...
  ..$ PosORNeg   : Factor w/ 2 levels "Neg","Pos": 2 1 2 1 2 1 2 1 1 2 ...
  ..$ p.1.P      : num [1:51] -0.435 -0.278 -0.285 0.31 -0.233 ...
  ..$ p.corr..1.P: num [1:51] -0.845 -0.704 -0.598 0.644 -0.818 ...
  ..$ VIP.2.     : num [1:51] 13.17 8.24 7.76 7.69 6.84 ...
 $ :'data.frame':   32 obs. of  5 variables:
  ..$ Primary.ID : Factor w/ 862 levels "X102.034169503712_9.041775",..: 564 621 527 590 566 358 563 571 625 12 ...
  ..$ PosORNeg   : Factor w/ 2 levels "Neg","Pos": 2 1 2 1 2 1 2 1 2 1 ...
  ..$ p.1.P      : num [1:32] -0.468 -0.301 -0.233 -0.183 -0.142 ...
  ..$ p.corr..1.P: num [1:32] -0.916 -0.813 -0.461 -0.502 -0.705 ...
  ..$ VIP.4.     : num [1:32] 13.56 8.58 7.02 5.65 4.03 ...
 $ :'data.frame':   44 obs. of  5 variables:
  ..$ Primary.ID : Factor w/ 862 levels "X102.034169503712_9.041775",..: 564 527 232 381 621 590 566 54 625 40 ...
  ..$ PosORNeg   : Factor w/ 2 levels "Neg","Pos": 2 2 1 2 1 1 2 1 2 1 ...
  ..$ p.1.P      : num [1:44] -0.415 -0.323 0.291 -0.263 -0.279 ...
  ..$ p.corr..1.P: num [1:44] -0.919 -0.701 0.681 -0.518 -0.851 ...
  ..$ VIP.2.     : num [1:44] 11.29 8.7 8.6 7.61 7.33 ...
 $ :'data.frame':   43 obs. of  5 variables:
  ..$ Primary.ID : Factor w/ 862 levels "X102.034169503712_9.041775",..: 564 621 232 92 210 114 473 563 252 95 ...
  ..$ PosORNeg   : Factor w/ 2 levels "Neg","Pos": 2 1 1 2 2 2 2 2 1 2 ...
  ..$ p.1.P      : num [1:43] -0.416 -0.333 -0.251 0.189 0.168 ...
  ..$ p.corr..1.P: num [1:43] -0.73 -0.753 -0.563 0.783 0.729 ...
  ..$ VIP.2.     : num [1:43] 11.05 8.76 8.05 5.3 5.11 ...

Я хочу написать код для преобразования каждого из столбцов «Primary.ID» в каждом из вложенных списков из факторов в символы, но не смог понять, как это сделать. Кроме того, в каталоге было 4 csv-файла, из которых я их читал, но я также хотел бы, чтобы код соответствовал динамическому числу csv-файлов.

Спасибо!

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

Мне нравится ответ Томасу лучше, чем мой. Тем не менее, вот способ, которым вы можете преобразовать factor в символ после чтения данных.

Сначала я создаю некоторые тойдата:

mydata <- list(data.frame(col_fac = letters[1:3], y = 3:5), 
               data.frame(col_fac = letters[4:6], z = 101:103))
str(mydata)
List of 2
 $ :'data.frame':   3 obs. of  2 variables:
  ..$ col_fac: Factor w/ 3 levels "a","b","c": 1 2 3
  ..$ y      : int [1:3] 3 4 5
 $ :'data.frame':   3 obs. of  2 variables:
  ..$ col_fac: Factor w/ 3 levels "d","e","f": 1 2 3
  ..$ z      : int [1:3] 101 102 103

Затем с использованием пакета tidyverse:

library(tidyverse)
mydata2 <- map(mydata, ~mutate(.x, col_fac = as.character(col_fac)))
str(mydata2)
List of 2
 $ :'data.frame':   3 obs. of  2 variables:
  ..$ col_fac: chr [1:3] "a" "b" "c"
  ..$ y      : int [1:3] 3 4 5
 $ :'data.frame':   3 obs. of  2 variables:
  ..$ col_fac: chr [1:3] "d" "e" "f"
  ..$ z      : int [1:3] 101 102 103
1 голос
/ 23 апреля 2019

Небольшая настройка вашего базового кода должна решить вашу проблему:

temp <- list.files(pattern="*.csv")
ls <- lapply(files, function(x) read.csv(x, stringsAsFactors = FALSE))

Аналогичным образом, решение tidyverse может быть:

library(tidyverse)

temp <- list.files(pattern="*.csv")
ls <- lapply(files, read_csv)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...