R 使用设置的窗口大小和测试条件搜索数据帧
我想循环浏览大约15000个文件,每个文件大约有16000行。每个文件有3列。如果满足某些条件,我想一次检查3行。如果是,我想写出文件的一部分(如下所示) 我想要满足的条件是,如果第3列在所有3行中的值都大于等于30,则打印出:名称(第1列)、第2列的第一个和最后一个值,以及第3列中的值。然后,它应该在文件中的下三行中搜索相同的条件。输入如下所示: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
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对每个组的计算列数不同