split dataframe de R en ligne
J'ai une longue dataframe comme ceci:
Row Conc group
1 2.5 A
2 3.0 A
3 4.6 B
4 5.0 B
5 3.2 C
6 4.2 C
7 5.3 D
8 3.4 D
...
Les données réelles ont des centaines de ligne. Je souhaite partager Un, C et D. j'ai regardé sur le web et trouvé plusieurs solutions, mais pas applicable à mon cas.
Comment diviser un bloc de données?
Par exemple:
Cas 1:
x = data.frame(num = 1:26, let = letters, LET = LETTERS)
set.seed(10)
split(x, sample(rep(1:2, 13)))
Je ne veux pas diviser par le nombre arbitraire
Cas 2: répartition par niveau/facteur de
data2 <- data[data$sum_points == 2500, ]
Je ne veux pas diviser par un facteur unique. Parfois, j'ai envie de combiner plusieurs niveaux.
Cas 3: sélectionner par numéro de ligne
newdf <- mydf[1:3,]
Les données réelles ont des centaines de lignes. Je ne sais pas le numéro de ligne. Je sais juste que le niveau que je souhaite partager.
OriginalL'auteur Amateur | 2012-10-29
Vous devez vous connecter pour publier un commentaire.
Il semble que vous voulez de deux trames de données, où l'on a
(A,B,C)
en elle et on a justeD
. Dans ce cas, vous pourriez faireCorrigez-moi si vous demandez quelque chose de différent
split(dat,dat$group == 'D')
est suffisant.Je pense que c'est peut-être la même chose.
(En quelque sorte) permet d'obtenir le même résultat, mais est plus idiomatique, une seule ligne, et idéalement renvoie les deux pièces en une seule structure de données. En général, on préfère utiliser des
split
.Elle retourne une liste de deux trames de données qui doivent être appelées à l'aide de données$
FALSE
" à la place de l'appel du bloc de données directement à des éléments. C'est plus compliqué si vous souhaitez créer plus de deux fentes. Donc, cela dépend de ce que vous faites.OriginalL'auteur Señor O
Vous pouvez envisager d'utiliser le
recode()
fonction de la "voiture".Actuellement,
dat$group
contient les lettres majuscules de A à J. Imaginer, nous voulions que les quatre groupes suivants:Maintenant, utilisez
recode()
(notez le point-virgule et les citations imbriquées).levels(dat$group)[levels(dat$group) %in% c("A","B","C")] <- "one"
par exemple.OriginalL'auteur A5C1D2H2I1M1N2O1R2T1
Pour ceux qui finissent ici par le biais de moteurs de recherche sur internet de temps en temps, la réponse à la question dans le titre est:
En supposant que votre bloc de données a commandé numériquement les noms de lignes. Aussi
split(x, rownames(x))
fonctionne, mais le résultat est réarrangé.OriginalL'auteur Mikko