R 通过循环将函数应用于列时删除一行

R 通过循环将函数应用于列时删除一行,r,R,我的目的:如果一个单元格值mean(colc)+10)以获得预期结果,但当数据帧中有数百列时,这不是一种明智的方法 似乎应该使用apply函数系列。我该怎么做? 提前谢谢 使用apply(这可能很慢): 使用colMeans获取每列的平均值,然后迭代每行,将每个值与其平均值进行比较(使用sapply),最后,选择所有结果均为真的行(使用[) >表示ind表示[i]) >df[行和(ind*1)=ncol(df),] 可乐 6 64.03106 83.72956 81.05986 使用行和和col

我的目的:如果
一个单元格值
,我将删除整个

例如,
第1行
中,
df[1,'cola']
mean(colb)+10&colc>mean(colc)+10)
以获得预期结果,但当数据帧中有数百列时,这不是一种明智的方法

似乎应该使用
apply
函数系列。我该怎么做?
提前谢谢

使用
apply
(这可能很慢):


使用
colMeans
获取每列的平均值,然后迭代每行,将每个值与其平均值进行比较(使用
sapply
),最后,选择所有结果均为真的行(使用
[

>表示ind表示[i])
>df[行和(ind*1)=ncol(df),]
可乐
6 64.03106 83.72956 81.05986

使用
行和
colMeans

> Means <- colMeans(df)+10
> ind <- sapply(seq_along(Means), function(i) df[,i] > Means[i] )
> df[rowSums(ind*1) == ncol(df), ]
      cola     colb     colc
6 64.03106 83.72956 81.05986

我想你是在从
dplyr
或base
filter
@NelsonGon寻找
filter
,请回答。
         cola     colb      colc
1  11.3703411 69.35913 31.661245
2  62.2299405 54.49748 30.269337
3  60.9274733 28.27336 15.904600
4  62.3379442 92.34335  3.999592
5  86.0915384 29.23158 21.879954
6  64.0310605 83.72956 81.059855
7   0.9495756 28.62233 52.569755
8  23.2550506 26.68208 91.465817
9  66.6083758 18.67228 83.134505
10 51.4251141 23.22259  4.577026
      cola     colb      colc
6    64.0310605 83.72956 81.059855
Res<-as.data.frame(apply(df,2,function(x) ifelse(x<mean(x)+10,0,x)))
Res[!apply(Res,1,function(x) any(x==0)),]
cola     colb     colc
6 64.03106 83.72956 81.05986
> Means <- colMeans(df)+10
> ind <- sapply(seq_along(Means), function(i) df[,i] > Means[i] )
> df[rowSums(ind*1) == ncol(df), ]
      cola     colb     colc
6 64.03106 83.72956 81.05986
df[rowSums(df < (colMeans(df) + 10)) == 0, ]
#      cola     colb     colc
#6 64.03106 83.72956 81.05986
library(dplyr)
df %>% filter_all(all_vars(. > (mean(.) + 10)))