J'ai un problème avec mutate{dplyr}
fonction dans le but d'ajouter une nouvelle colonne au bloc de données. Je veux qu'une nouvelle colonne soit de type caractère et se compose de "concat" de mots triés à partir d'autres colonnes (qui sont également de type caractère). Par exemple, pour le bloc de données suivant:
> library(datasets)
> states.df <- data.frame(name = as.character(state.name),
+ region = as.character(state.region),
+ division = as.character(state.division))
>
> head(states.df, 3)
name region division
1 Alabama South East South Central
2 Alaska West Pacific
3 Arizona West Mountain
Je voudrais obtenir une nouvelle colonne avec le premier élément suivant:
"Alamaba_East South Central_South"
J'ai essayé ceci:
mutate(states.df,
concated_column = paste0(sort(name, region, division), collapse="_"))
Mais j'ai reçu une erreur:
Error in sort(1:50, c(2L, 4L, 4L, 2L, 4L, 4L, 1L, 2L, 2L, 2L, 4L, 4L, :
'decreasing' must be a length-1 logical vector.
Did you intend to set 'partial'?
Merci pour toute aide à l'avance!
Vous devez utiliser sep =
ne pas collapse =
, et pourquoi utiliser sort
?. Et j'ai utilisé paste
et non paste0
.
library(dplyr)
states.df <- data.frame(name = as.character(state.name),
region = as.character(state.region),
division = as.character(state.division))
res = mutate(states.df,
concated_column = paste(name, region, division, sep = '_'))
En ce qui concerne le tri, vous n'utilisez pas correctement sort
. Peut-être que vous voulez:
as.data.frame(lapply(states.df, sort))
Cela trie chaque colonne et crée un nouveau data.frame
avec ces colonnes.
Ajoutant à la réponse de Paul. Si vous souhaitez trier les lignes, vous pouvez essayer order . Voici un exemple:
res1 <- mutate(states.df,
concated_column = apply(states.df[order(name, region, division), ], 1,
function(x) paste0(x, collapse = "_")))
Ici, l'ordre trie le fichier data.frame states.df par nom, puis rompt le lien par région et division