1
votes

Changer plusieurs classes vectorielles dans R à la fois

J'essaie d'utiliser changer les classes de plusieurs vecteurs à la fois, en utilisant %>% mutate_if

dans un jeu de données vide de vecteurs logiques. Je peux les changer un par un avec as.factor() .

Mon ensemble de données ressemble à ceci:

library(dplyr)
G <- as.factor(levels(as.factor(id)))
dat <- as.data.frame(G)
 
 datprep <- data.frame(matrix(vector(), length(G),
                          length(levels(as.factor(code)))
                          )
                       )
 colnames(datprep) = levels(as.factor(code))


datD <- cbind(datprep, datD)

# columns are logical, shall be factors.
datD %>% mutate_if(is.logical, as.factor)

Maintenant, je vous poste tout mon code si cela aide:

ID     code
pc01   cat
pc02   dog
pc03   cat
pc04   horse
pc01   dog
pc02   horse

Aucune suggestion?


1 commentaires

s'avère, le problème était vector () dans la mise en place de data.frame.


3 Réponses :


0
votes

Si j'ai bien compris votre problème (pas sûr car il n'y a pas de colonne logique dans votre exemple, juste un caractère), vous devez inclure le ~ et. avec mutate_if (et bien d'autres):

library(dplyr)

df <- dplyr::tibble(ID = c("pc01", "pc02", "pc03", "pc04", "pc01", "pc02"),
                    code = c("cat", "dog", "cat", "horse", "dog", "horse"))

df %>% 
  dplyr::mutate_if(is.character, ~ as.factor(.))

   ID    code 
  <fct> <fct>
1 pc01  cat  
2 pc02  dog  
3 pc03  cat  
4 pc04  horse
5 pc01  dog  
6 pc02  horse

Le tilde "~" sinalise une fonction (le résultat est à gauche) et le "." is représente n'importe quelle colonne ... J'ai utilisé is.character () car c'est ce que sont vos colonnes d'exemple, mais vous pouvez le changer en tout autre type de vérification


1 commentaires

s'ils sont logiques, modifiez simplement le caractère is.character en is.logical et cela devrait fonctionner



1
votes

Dans la nouvelle version de dplyr , nous pouvons également utiliser à across

library(dplyr)
df <- df %>%
     mutate(across(where(is.character), factor))


0 commentaires

1
votes

Dans la base R, vous pouvez faire:

df <- rapply(df,factor,"character", how="replace")

ou même

df <- type.convert(df)


0 commentaires