Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在数据帧中循环_R_For Loop - Fatal编程技术网

R 在数据帧中循环

R 在数据帧中循环,r,for-loop,R,For Loop,我有一个57列122行的数据框。对于每一列,我想计算两件事: 1) 小于-1的值的数目 (2) 小于-1的时间值的数量连续出现三次或更多。例如,如果数据为: dat<-c(1,-1,-1.3,-1.2,-1,0.5,3.2,2.2,-1,-1,0,-4,-3,-2,-1,2) dat对于第一个问题,可能更容易使用colSums。我们用df1

我有一个57列122行的数据框。对于每一列,我想计算两件事:

1) 小于-1的值的数目

(2) 小于-1的时间值的数量连续出现三次或更多。例如,如果数据为:

dat<-c(1,-1,-1.3,-1.2,-1,0.5,3.2,2.2,-1,-1,0,-4,-3,-2,-1,2)

dat对于第一个问题,可能更容易使用
colSums
。我们用
df1<-1
sum
得到一个逻辑矩阵,用
colSums
得到矩阵中的
TRUE

 colSums(df1< -1, na.rm=TRUE)

对于在列中循环,我们还可以使用
lappy/sapply
。在这里,我使用了
vapply
,因为它可能更快一些,也更安全(如果有非数字元素,它应该给出错误)。在每列中,我们得到
x2
)的
rle
,并得到

提供的数据是数值向量,而不是数据帧。对于数据帧和向量,解决方案可能会有所不同。如果您有一个data.frame,如您所述,对于第二种情况,
lappy(df1,函数(x){rl=3)}
@DavidArenburg,您可以将其作为解决方案发布。我不介意:-)@akrun,不,整个事情你处理得很好,谢谢你们两个。代码工作得很好!干杯
tmpdat<-data.frame(values=dat, tmp_vals=dat)
tmpdat$tmp_vals[tmpdat$values<(-1)]<-"lower"
bds<-data.frame(Values=rle(tmpdat$tmp_vals)$values,Sequential=rle(tmpdat$tmp_vals)$lengths)
sum(bds$Sequential >= 3 & bds$Values == "lower")
>1 
for (i in 1:ncol(d.f)){
        d.f[i]<-sum(d.f.[i]< -1)
 colSums(df1< -1, na.rm=TRUE)
  vapply(df1, function(x) 
          sum(with(rle(x < -1), lengths[values]) > 2), numeric(1))