对R

时间:2017-08-01 19:47:31

标签: r

我有20个csv数据格式完全相同的文件,大约40列不同的数字,但每列中的值不同。我想对每个数据框应用一系列更改,以便从每个数据框中提取特定信息。

具体来说,我想从每个数据帧中提取四列,找到每个数据帧中每列的最大值,然后将所有这些最大值一起添加,因此我得到每个数据帧的最后一个数字。像这样:

str(data)    
Extract<-data[c(1,2,3,4)]
Max<-apply(Extract,2,max)
Add<-Max[1] + Max[2] + Max[3] + Max[4]

我有上面编写的代码单独为每个数据框执行所有这些步骤,但是是否可以同时将这些代码应用于所有这些步骤?

2 个答案:

答案 0 :(得分:0)

如果您将所有20个文件名放入名为files

的向量中
Maxes <- numeric(length(files))
i <- 1

for (file in files) {

     data <- read.csv(file)
     str(data)    
     Extract<-data[c(1,2,3,4)]
     Max<-apply(Extract,2,max)
     Add<-Max[1] + Max[2] + Max[3] + Max[4]
     Maxes[i] <- Add
     i <- i+1

}

虽然str(data)只会导致很多东西打印到终端20次。我不确定它的价值,但它在你的问题中所以我包括在内。

答案 1 :(得分:0)

将所有文件放入公共文件夹,例如/path/temp/

csvs <- list.files("/path/temp")   # vector of csv

使用colMax

的自定义功能
colMax <- function(data) sapply(data, max, na.rm = TRUE)

使用foreachdplyrreadr

library(foreach)
library(dplyr)

foreach(i=1:length(csvs), .combine="c") %do% { read_csv(csvs[i]) %>%
                                                select(1:4) %>% 
                                                colMax(.) %>% 
                                                sum(.)
                                             }  # returns a vector