Использование tapply в списке фреймов данных - PullRequest
0 голосов
/ 14 октября 2018

Я хотел бы использовать tapply для списка фреймов данных в oder, чтобы вычислить суммы для отдельных групп, а затем записать в таблицу вхождение значения 0. Для отдельного фрейма данных я бы сделал это:

sums <- tapply(my_data_frame$V3, my_data_frame$V2, sum)
table(unlist(sums==0))

Поскольку я должен рассчитать это для ряда файлов, я загрузил их все в список:

files <- Sys.glob("*txt")
listOfFiles <- lapply(files, function(x) read.table(x, skip = 1, sep = "\t"))
listOfFiles <- lapply(listOfFiles, function (x) na.omit(x))

Я пробовал это, но это не работает:

lapply(listOfFiles, tapply(
    lapply(listOfFiles, "[", c(2)),
    lapply(listOfFiles, "[", c(3)),
    sum)
)

Может ли кто-нибудь подсказать мне, что делать?

1 Ответ

0 голосов
/ 14 октября 2018

Подумайте о создании обобщенной функции из ваших вызовов read.table, tapply и table, и у вас будет lapply итеративное чтение файлов и вызов вашей процедуры:

proc_sums <- function(myfile) {
   # READ FILE INTO DATA FRAME
   my_data_frame <- read.table(myfile, skip = 1, sep = "\t")
   my_data_frame <- na.omit(my_data_frame)

   # RUN GROUP SUMS
   sums <- tapply(my_data_frame$V3, my_data_frame$V2, sum)
   tbl <- table(unlist(sums==0))

   return(tbl)
}

files <- Sys.glob("*txt")
# ITERATE THROUGH FILES AND CALL PROCEDURE
list_of_sum_tables <- lapply(files, proc_sums)
...