2012-02-21 5 views
1

Je suis en train de découper une rangéeR couper une ligne dans plusieurs lignes de longueur égale

x = [1 2 3 4 5 6 7 8 9 10 11 12]

en plusieurs lignes de longueur égale de sorte que

y (row1) = [1 2 3 4

y (row2) = 5 6 7 8

y (row3) = 9 10 11 12]

Je sais que je peux y arriver en utilisant une combinaison de rbind et de cbind, mais l'ensemble de données que j'essaie d'appliquer est beaucoup plus grand que l'exemple, donc je cherche un moyen de le faire plus rapidement et automatiquement. J'ai essayé de couper et CUT2 mais ceux qui travaillent na pas non plus

Jelle

+0

J'ai l'impression que cela est destiné à être du pseudo-code, mais la façon dont vous avez défini x dans votre question n'est pas une syntaxe R valide. utilisez 'x <- 1: 12' ou' x <- seq (1,12, par = 1) 'ou même' x <- c (1,2,3,4,5,6,7,8,9 , 10,11,12) 'à la place. – Chase

Répondre

5

La fonction matrix() est votre ami ici:

> matrix(1:12, nrow = 3, byrow = TRUE) 
    [,1] [,2] [,3] [,4] 
[1,] 1 2 3 4 
[2,] 5 6 7 8 
[3,] 9 10 11 12 

Notez le paramètre optionnel, byrow. La valeur par défaut est FALSE et remplira la matrice par des colonnes, en la définissant à vrai dans ce cas obtient les données arrangées dans l'ordre que vous avez décrit. Juste quelque chose à faire attention, car R ne jettera pas une erreur si vous remplissez par colonne , mais vos données ne seront pas au bon format!

3

Utilisation matrix:

> y <- 1:12 
> y 
[1] 1 2 3 4 5 6 7 8 9 10 11 12 
> matrix(y,3,4,byrow=1) 
    [,1] [,2] [,3] [,4] 
[1,] 1 2 3 4 
[2,] 5 6 7 8 
[3,] 9 10 11 12 

Edit: J'inclus l'argument byrow=TRUE à matrix (souligné par Chase dans les commentaires) qui remplit la matrice le long de les lignes au lieu de vers le bas les colonnes.

+1

Juste un FYI, pour correspondre à la sortie de l'OP, vous devez remplir par rangée. – Chase

+0

@Chase Bonne prise! – chl

+0

@chase merci, l'édition. –

Questions connexes