Je souhaite créer un vecteur ou une liste dans un ensemble de données concaténant les scores de plusieurs colonnes dans un autre ensemble de données.
Je peux le faire comme ceci:
my_vec <- c(0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0)
Mais j'aurais besoin de 60 lignes de code. Je suis presque sûr qu'il existe une autre façon de procéder. Quand j'essaye ceci:
x <- read.table( text = " v1 v2 V3 0 1 0 1 0 1 0 0 0 0 0 1 1 0 0", header = TRUE )
Je reçois ce message d'erreur
Warning messages: 1: In t$`1`:t$`644` : numerical expression has 20 elements: only the first used
Mon ensemble de données ressemble à ceci
XXX
Et comme sortie, je voudrais juste un vecteur avec des valeurs pour chaque colonne l'une après l'autre, comme ceci:
my_vec <- c(x$v1:x$v644)
3 Réponses :
Vous pouvez utiliser paste ()
. S'ils sont tous dans le même data.frame
, vous pouvez créer une nouvelle colonne avec la concaténation.
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
Sortie:
a <- letters[1:4] b <- letters[5:8] c <- letters[7:10] reduce(list(a, b, c), union)
Exemple de données:
df <- data.frame(a = letters[1:4], b = letters[5:8], c = letters[7:10])
S'ils sont dans des vecteurs différents, vous pouvez faire quelque chose comme ceci:
a b c conc 1 a e g a e g 2 b f h b f h 3 c g i c g i 4 d h j d h j
Sortie:
require(tidyverse) df %>% mutate(conc = paste(a, b, c))
p >
Merci! Ils ne sont pas dans le même ensemble de données. Et je ne veux pas d'une autre colonne, je veux que ce soit comme une liste dans un objet séparé. Dans votre exemple, le résultat que je voudrais obtenir serait une liste contenant: a, b, c, d, e, f, g, h, g, h, i, j, etc. Je suis désolé si je n'ai pas Je ne me suis pas bien expliqué ...
Pas de soucis, veuillez voir ma modification. C'est ce que vous vouliez dire?
J'ai le même message d'avertissement lorsque vous utilisez coller ... Dois-je nommer toutes les colonnes une par une? N'y a-t-il pas une manière plus propre de le faire? MERCI
Non, toujours pas de travail ... = (Même avertissement. Je fais ceci df <-mutate (conc = paste (x $ v1: xv2)) ## pour éviter de mettre tous les nombres jusqu'à 644
quel avertissement recevez-vous?
Erreur dans mutate _ (. Data, .dots = compat_as_lazy_dots (...)): l'argument ".data" est manquant, sans valeur par défaut En plus: Messages d'avertissement: 1: In t $ 1
: t $ 644
: l'expression numérique comporte 20 éléments: seul le premier utilisé
Merci pour votre modification !! L'erreur est toujours dans la même partie. J'ai besoin d'un moyen de remplacer "(a, b, c)" par "(a: c)" sans avoir cet avertissement ... Une idée?
Désolé, j'étais en retard sur vos modifications, hehe. C'est mieux! MERCI! Mais je crée toujours un autre ensemble de données, plutôt que des listes. Et en tout cas, ça me fait faire au moins trente lignes de code ... N'y a-t-il pas une façon plus appropriée de le faire?
Comment souhaitez-vous spécifier vos vecteurs d'entrée? sont-ils nommés au hasard? sont-ils les mêmes?
Non, ils ne sont pas aléatoires. Ils proviennent d'un ensemble de données contenant des scores. Les scores sont de 0 et 1. Je dois donc choisir les 0 et 1 dans chaque colonne et les mettre ensemble dans une chaîne / une liste / un vecteur ...
Font-ils tous partie de data.frame
x? où chaque colonne est votre vecteur à concaténer?
Une solution simple comme
my_vec = x[, 1:644]
pourrait-elle fonctionner?
Non, cela ne fait que reproduire le jeu de données original. Mais merci quand même!
En supposant que x est un data.frame:
x <- read.table( text = " v1 v2 V3 0 1 0 1 0 1 0 0 0 0 0 1 1 0 0", header = TRUE ) > as.vector(unlist( split(as.matrix(x), row(x)) )) [1] 0 1 0 1 0 1 0 0 0 0 0 1 1 0 0
La sortie peut être un vecteur de caractères, mais vous pouvez à nouveau rendre les valeurs numériques en utilisant as.numeric () .
Crédit:
J'ai eu l'idée en utilisant le post suivant comme guide
Comment diviser une trame de données R en vecteurs (dissocier)
EDIT:
En utilisant vos exemples de données, nous obtenons ce qui suit:
> as.vector(unlist( split(as.matrix(x), row(x)) ))
J'essaierai ceci. Je pourrais le résoudre en utilisant une double boucle dans Excel mais je veux toujours le faire via R. Merci!
Pourriez-vous fournir un exemple de données?
Pardon, je ne suis pas en mesure de faire le tableau correctement, est-ce compréhensible, DJV?
vous pouvez utiliser
unname (unlist (x))
également que la stratégie
read.table ()
est un excellent moyen de partager des données dans des paramètres de forum comme SO