Je veux compter le nombre de colonnes pour chaque ligne par condition de caractère et manquantes.
Par exemple, j'ai ce jeu de données, Je veux Pour créer des colonnes Je veux compter le nombre de colonnes contenant J'ai essayé une approche dans d'autres messages, comme Cependant, il renvoie des numéros incorrects et je n'ai pas pu trouver les raisons. P> Pourriez-vous me faire savoir comment pour résoudre ce problème? p> p> test p> p>
num code>, comptant le nombre de colonnes "non" dans la valeur manquante ou vide. p>
na code> et de valeur vide comme p>
Rowsums code> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P > Nombre de colonnes par une condition (>) pour chaque ligne p>
4 Réponses :
Vous pouvez utiliser rowsums code> pour compter le numéro de
NA code> S ou des valeurs vides dans chaque ligne, puis soustrayez-le du nombre de colonnes dans le Dataframe.
test$num <- ncol(test) - rowSums(is.na(test) | test == "")
test
# a b c d num
#1 aa aa aa 3
#2 bb <NA> bb 2
#3 cc aa <NA> 2
#4 dd <NA> <NA> 1
#5 cc cc 2
#6 <NA> dd dd dd 3
Supprimé ma réponse depuis qu'il était trop proche de la vôtre: rowsums (test! = "" &! Is.na (test)) code>
@sindri_baldur Je pense que c'est assez différent d'être une réponse séparée.
Une autre idée à l'aide de Rowsums code> est de remplacer vide avec NA, c'est-à-dire
rowSums(!is.na(replace(test, test == '', NA)))
#[1] 3 2 2 1 2 3
Vous pouvez utiliser ou tel que p> nchar code> +
rowsums code>
% in% code> +
rowsums code> p>
Que diriez-vous de cette approche de la tenie tendule qui vous indique également combien de colonnes contiennent des nas ou des chaînes vides?
a<-c("aa","bb","cc","dd","",NA) b<-c("",NA,"aa","","","dd") c<-c("aa","",NA,NA,"cc","dd") d<-c("aa","bb","",NA,"cc","dd") test<-data.frame(cbind(a,b,c,d)) library(magrittr) #import the pipe operator num_cols <- test %>% tibble::rowid_to_column("row_id") %>% #1st add a rowid column dplyr::group_by(row_id) %>% #split the data into single row groups (i.e. #row vectors) tidyr::nest() %>% #turn it into a list column called data dplyr::mutate(num_NAs = purrr::map_dbl(data, #loop over the data column of row #vectors using map_dbl ~sum(is.na(.))), #count the number of NAs num_empty = purrr::map_dbl(data, #count the empty strings ~sum(. == "", na.rm = T)), num_values = purrr::map_dbl(data, #count columns without NAs or #missing values (what you asked for) ~length(.)-sum(num_NAs, num_empty)) ) %>% dplyr::ungroup() %>% #remove the grouping structure dplyr::select(num_NAs, num_empty, num_values) #extract only the variables you need test_v2 <- cbind(test, num_cols) test_v2 a b c d num_NAs num_empty num_values 1 aa aa aa 0 1 3 2 bb <NA> bb 1 1 2 3 cc aa <NA> 1 1 2 4 dd <NA> <NA> 2 1 1 5 cc cc 0 2 2 6 <NA> dd dd dd 1 0 3
Bien que cette solution nécessite plus de code que les autres options, cela vous donne plus d'informations (si vous le souhaitez). Vous pouvez également insérer facilement une couche SELECT () au début (avant la couche GROUP_BY) pour appliquer uniquement ces règles de comptage dans un sous-ensemble de colonnes si vous ne vouliez pas obtenir de compte pour l'ensemble de laacrame.