我想使用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)
)
有人可以给我任何提示吗?
答案 0 :(得分:1)
考虑为您的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)