3
votes

Supprimer une ligne lors de l'application d'une fonction aux colonnes via une boucle

      cola     colb      colc
6    64.0310605 83.72956 81.059855
r

2 commentaires

Je pense que vous recherchez un filtre de dplyr ou de la base Filter .


@NelsonGon, répondez s'il vous plaît.


3 Réponses :


1
votes

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)),]


0 commentaires

0
votes

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


0 commentaires

0
votes

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


0 commentaires