我有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]
我有上面编写的代码单独为每个数据框执行所有这些步骤,但是是否可以同时将这些代码应用于所有这些步骤?
答案 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)
使用foreach
,dplyr
和readr
library(foreach)
library(dplyr)
foreach(i=1:length(csvs), .combine="c") %do% { read_csv(csvs[i]) %>%
select(1:4) %>%
colMax(.) %>%
sum(.)
} # returns a vector