cola colb colc 6 64.0310605 83.72956 81.059855
3 Réponses :
Utilisation de apply (cela peut être lent):
cola colb colc 6 64.03106 83.72956 81.05986
Résultat:
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)),]
Utilisez colMeans pour obtenir la moyenne de chaque colonne, puis parcourez chaque ligne en comparant chaque valeur à sa moyenne (en utilisant sapply ), enfin, sélectionnez la ligne où tous les résultats sont TRUE (en utilisant [).
> 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
Une solution one-liner utilisant rowSums et colMeans
library(dplyr) df %>% filter_all(all_vars(. > (mean(.) + 10)))
Ou version dplyr en utilisant filter_all et all_vars
df[rowSums(df < (colMeans(df) + 10)) == 0, ] # cola colb colc #6 64.03106 83.72956 81.05986
Je pense que vous recherchez un
filtrededplyrou de la baseFilter.@NelsonGon, répondez s'il vous plaît.