J'ai un dataframe avec la première colonne comme features et d'autres colonnes avec des valeurs dans l'ensemble {0,1,2, -1, -2}.
Voici la structure du dataframe.
df <- structure(list(Features = structure(c(1L, 11L, 12L, 13L, 14L,
15L, 16L, 17L, 18L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L), .Label = c("Var1",
"Var10", "Var11", "Var12", "Var13", "Var14", "Var15", "Var16",
"Var17", "Var18", "Var2", "Var3", "Var4", "Var5", "Var6", "Var7",
"Var8", "Var9"), class = "factor"), Column1 = c(0L, 0L, 0L, 0L,
0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, -1L, -1L, -1L, 0L, 0L), Column2 = c(0L,
0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, -2L, -2L, -2L, -2L, -2L,
0L, 0L), Column3 = c(0L, 0L, 0L, 0L, 2L, 2L, 2L, 2L, 2L, 2L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), Column4 = c(0L, 0L, 0L, 2L,
2L, 2L, 2L, 0L, 0L, 0L, 0L, 0L, -2L, -2L, -2L, -2L, 0L, 0L),
Column5 = c(0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 0L, 0L, 0L, 0L, 0L), Column6 = c(0L, 0L, 0L, 2L, 2L,
2L, 0L, 0L, -1L, -1L, -1L, -1L, -1L, -1L, 0L, 0L, 0L, 0L),
Column7 = c(-1L, -1L, 2L, 2L, 2L, 2L, 2L, 2L, -1L, -1L, -1L,
-1L, -1L, -1L, -1L, -1L, -1L, -1L), Column8 = c(1L, 1L, 1L,
1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L
)), class = "data.frame", row.names = c(NA, -18L))
Pour chaque colonne, je voulais calculer le pourcentage de fonctionnalités sans 0 dans les colonnes.
Toute aide est appréciée. Merci beaucoup.
3 Réponses :
Peut-être que quelque chose comme ce qui suit fera ce que vous voulez.
df [-1]! = 0 renvoie une matrice logique, ses colSums sont le nombre d'entrées non nulles dans chaque colonne. Divisez par le nombre de lignes et multipliez par 100 pour obtenir le pourcentage souhaité.
100*colSums(df[-1] != 0)/nrow(df) # Column1 Column2 Column3 Column4 Column5 # 44.44444 50.00000 33.33333 44.44444 50.00000 # Column6 Column7 Column8 # 50.00000 100.00000 77.77778
Nous pouvons utiliser colSums et diviser par nombre de lignes dans le dataframe
library(dplyr) df %>% summarise_at(-1, ~sum(.!= 0)/n())
Ou en utilisant dplyr p >
colSums(df[-1] != 0)/nrow(df) #Column1 Column2 Column3 Column4 Column5 Column6 Column7 Column8 # 0.444 0.500 0.333 0.444 0.500 0.500 1.000 0.778
Merci beaucoup. Qu'est-ce que -1 ici?
@beginner Il s'agit d'ignorer la 1ère colonne ici car vous ne voulez pas la calculer pour la colonne Features .
Nous pouvons simplement utiliser colMeans sur une matrix
library(tidyverse) map_dbl(df[-1], ~ mean(.x != 0))
Ou utiliser tidyverse
colMeans(df[-1] != 0) # Column1 Column2 Column3 Column4 Column5 Column6 Column7 Column8 # 0.4444444 0.5000000 0.3333333 0.4444444 0.5000000 0.5000000 1.0000000 0.7777778
Pouvez-vous montrer la sortie attendue pour l'exemple
Voulez-vous savoir quelles lignes n'ont pas de zéro dans toutes les colonnes?
@Cettt Pour chaque colonne, je veux connaître le pourcentage de fonctionnalités qui n'ont pas de 0 dans les colonnes.