2017-10-17 2 views
1

J'ai un data.frame qui ressemble à ceci:Faire une variable de facteur de quelques colonnes de data.frame

A <- data.frame(id = 1:5, col1 = c(0,1,1,0,0), col2 = c(2,0,0,0,0), col3 = c(0,0,0,3,3))

Comment puis-je faire une variable factor hors de lui, il ressemblera à ceci:

factor(c(2,1,1,3,3))

Je sais comment faire un facteur hors d'une colonne, mais ne savez pas comment les fusionner ensemble

Répondre

2

Vous pouvez utiliser rowSums

A <- data.frame(id = 1:5, col1 = c(0,1,1,0,0), col2 = c(2,0,0,0,0), col3 = c(0,0,0,3,3)) 
A$col4 <- as.factor(rowSums(A[,2:4])) 
str(A) 

> str(A) 
'data.frame': 5 obs. of 5 variables: 
    $ id : int 1 2 3 4 5 
$ col1: num 0 1 1 0 0 
$ col2: num 2 0 0 0 0 
$ col3: num 0 0 0 3 3 
$ col4: Factor w/ 3 levels "1","2","3": 2 1 1 3 3 
+0

Merci! Très simple. J'aurais dû penser à 'rowSums' moi-même. –

2

Vous pouvez d'abord convertir tous les zéros à NA de puis utilisez coalesce de dplyr à "fusionner" les colonnes en une seule:

library(dplyr) 

A$col4 = A %>% 
    select(-id) %>% 
    mutate_all(funs(replace(., . == 0, NA))) %>% 
    {coalesce(!!! .)} %>% 
    as.factor() 

Résultat:

id col1 col2 col3 col4 
1 1 0 2 0 2 
2 2 1 0 0 1 
3 3 1 0 0 1 
4 4 0 0 3 3 
5 5 0 0 3 3 

> A$col4 
[1] 2 1 1 3 3 
Levels: 1 2 3 

Note: 0 Notationen coalesce épissure l'argument en points, donc il est équivalent à coalesce(A$col1, A$col2, A$col3)

+0

Salut! On dirait bien, mais il me donne une erreur: 'Erreur dans $ <-. Data.frame (* tmp *, col4, valeur = c (NA, 1L, 1L, NA, NA,: remplacement a 15 lignes, données a 5' –