Анализ нескольких наборов данных в R

#r #data-analysis

#r #анализ данных

Вопрос:

У меня есть следующий код на R для анализа одного набора данных:

 da_if <- function(x, TYPE) {
  data <-read.csv(x,sep = "", skip = 61, na.strings = "NA",header = F, col.names = paste0("V", seq_len(6)), fill = TRUE) #skips first 61 lines due to those lines all being settings and makes six columns
  data$V2 <- as.factor(data$V2)
  data$V5 <- as.numeric(data$V5)
  data$V6 <-as.numeric(data$V6) # 8amp;9 are needed in order so sum up values and get rid of two words!
  y <- split(data, data$V2)
  if (TYPE == "SCALES") {
    y <- y$SCALES
    y[is.na(y)]=0
    y$V5<-y$V5 y$V6
    y<-y[,-6]
    return(y)
  } else if (TYPE == "TRACK") {
    y <- y$TRACK
    return(y)
  } else if (TYPE == "RESMAN") {
    y<- y$RESMAN
    return(y)
  } else if (TYPE == "COMMUN"){
    y <- y$COMMUN
    return(y)
  } else {print("Insert valid datatype...")}
}
  

И у меня есть список файлов для анализа, сгенерированный этим кодом:

 fta<-list.files(pattern=".log", full.names = T) #files to analyse
  

Есть ли какой-либо способ изменить мою функцию, чтобы анализировать 32 набора данных одновременно? Я пытался использовать apply, но, честно говоря, я не могу сохранить результаты в 32 разных переменных для дальнейшего анализа данных, и по какой-то причине я слишком глуп, чтобы написать цикл for, который действительно что-то делает… На данный момент я просто хотел бы проанализировать масштабную часть своих данных.

Заранее всем спасибо!!

Редактировать: мои необработанные данные выглядят примерно так и являются частью многозадачного упражнения NASA Toolbox:

 14:29:00.467154     TRACK   STATE   CURSOR  X   0.012751340110832256
14:29:00.467154     TRACK   STATE   CURSOR  Y   -0.08704373265652304
14:29:00.487683     TRACK   STATE   CURSOR  X   0.012479403159392622
14:29:00.488668     TRACK   STATE   CURSOR  Y   -0.08733692625790845
14:29:00.491681     MAIN    STATE       PAUSE
14:29:00.515652     MAIN    STATE   GENERICSCALES   START
14:30:53.308644     SCALES  INPUT   Mentale Anforderung 7
14:30:53.309640     SCALES  INPUT   Körperliche Beanspruchung   6
14:30:53.310467     SCALES  INPUT   Zeitdruck   5
14:30:53.311462     SCALES  INPUT   Leistung    3
14:30:53.311462     SCALES  INPUT   Anstrengung 7
14:30:53.312459     SCALES  INPUT   Frustration 5
14:30:53.316458     MAIN    STATE       RESUME
14:30:53.319470     MAIN    STATE   PUMPSTATUS  STOP
14:30:53.320461     MAIN    STATE   RESMAN  STOP
14:30:53.321456     MAIN    STATE   SYSMON  STOP
14:30:53.322470     MAIN    STATE   COMMUNICATIONS  STOP
  

Ответ №1:

Не храните данные в 32 разных переменных. Использование lapply и хранение данных в виде списка :

 list_data <- lapply(fta, da_if, TYPE = 'SCALES')
  

Если вы хотите объединить список данных в один, вы можете использовать

 combine_data <- do.call(rbind, list_data)
  

Комментарии:

1. Большое спасибо за ваш ответ! Результат, который я получаю, таков: ошибка в read.table(file = file, header = header, sep = sep, quote = quote, : больше столбцов, чем имен столбцов Есть ли какой-либо способ исправить это? Если я дополнительно установлю для своих столбцов значение seq_len равным 7, я получу $ operator недопустимо для атомарных векторов…

2. Итак, я просто еще покопался и выяснил, что fta — это список с 37 файлами журналов. Эти файлы журналов содержат около 12000 строк каждый, грубо говоря, мне как-то нужно сообщить функции lapply, что она должна поместить все пути, хранящиеся в fta, как x в функцию da_if. Я как-то застрял там…

3. Попробуйте unlist список. list_data <- lapply(unlist(fta), da_if, TYPE = 'SCALES')

4. Большое спасибо! Я допустил ошибку с моими необработанными данными, и это сработало хорошо!