R 使用设置的窗口大小和测试条件搜索数据帧

R 使用设置的窗口大小和测试条件搜索数据帧,r,loops,dataframe,R,Loops,Dataframe,我想循环浏览大约15000个文件,每个文件大约有16000行。每个文件有3列。如果满足某些条件,我想一次检查3行。如果是,我想写出文件的一部分(如下所示) 我想要满足的条件是,如果第3列在所有3行中的值都大于等于30,则打印出:名称(第1列)、第2列的第一个和最后一个值,以及第3列中的值。然后,它应该在文件中的下三行中搜索相同的条件。输入如下所示: d3.1 1 2 d3.1 2 2 d3.1 3 2 d3.1 4 31 d

我想循环浏览大约15000个文件,每个文件大约有16000行。每个文件有3列。如果满足某些条件,我想一次检查3行。如果是,我想写出文件的一部分(如下所示)

我想要满足的条件是,如果第3列在所有3行中的值都大于等于30,则打印出:名称(第1列)、第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
输出应如下所示:

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)}
库(data.table)
对于(i在1:15000中){

文件对函数本质的尝试:

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
require(data.table)

dat我尝试了你的代码,但当我增加数据帧的长度时失败。例如:require(data.table)dat另外,当您增加数据帧的行数时,grp列命令不再一次只搜索3行。@user3141121-抱歉,
dat$grp
代码中有一个错误-现在已修复。如果行数不能平均除以3,您将收到警告,但这是意料之中的。我收到了这个错误。有什么办法可以绕过它吗?
[.data.table
(x.out,if(all(V3>30))c(as.character(V1[1])中的错误:j对每个组的计算列数不同