我想循环浏览大约15,000个文件,每个文件有~16,000行。每个文件有3列。如果满足某些条件,我想一次检查3行。如果是,我想写出部分文件(如下所示)。
我想要满足的条件是,如果第3列在所有3行中的值为30或更多,则打印出:名称(column1), first 和 last 第2列的值,以及第3列的值。然后,它应该在文件中的下三行搜索相同的条件。输入如下所示:
d3.1 1 2
d3.1 2 2
d3.1 3 2
d3.1 4 31
d3.1 5 50
d3.1 6 40
d3.1 7 13
输出应如下所示:
d3.1 4 6 31 50 40
我现在有类似的东西但是我不确定如何一次搜索第3列,第3行并重新格式化输出:
library(data.table)
for (i in 1:15000){
file <- list.files('~/dir',full.names=T)
x <- fread(file[i], header=F)}
答案 0 :(得分:1)
尝试功能的内容:
require(data.table)
dat <- data.table(V1="d3.1",V2=1:7,V3=c(2,2,2,31,50,40,13))
dat$grp <- rep(1:ceiling(nrow(dat)/3),each=3)
dat[, if(all(V3>30)) c(as.character(V1[1]),V2[1],V2[3],as.list(V3)), by=grp]
# grp V1 V2 V3 V4 V5 V6
#1: 2 d3.1 4 6 31 50 40