2016-03-28 4 views
3

J'ai une trame de données en R comme celui-ci (bien plus longtemps que cela, mais je suppose qu'il résume):R matrice de division par chaque valeur de la colonne

label id value1 value2 
p01  1  0  0 
p02  2  1  3 
p03  1  0  5 
p04  2  2  4 
p05  3  6  7 
p06  1  0  8 

et je tiens à les séparer de toutes les valeurs 1 colonne id. Donc, dans le résultat, je devrais avoir 3 sous matrices comme:

p01  1  0  0 
p02  2  1  3 

p03  1  0  5 
p04  2  2  4 
p05  3  6  7 

p06  1  0  8 

Comment pourrais-je faire cela? J'ai essayé:

result=split(xx,xx$id==1) 

mais il sépare les 1 et autres.

Répondre

5

Nous pouvons créer la variable de regroupement en prenant la somme cumulée du vecteur logique (df1$id==1)

split(df1,cumsum(df1$id==1)) 
#$`1` 
# label id value1 value2 
#1 p01 1  0  0 
#2 p02 2  1  3 

#$`2` 
# label id value1 value2 
#3 p03 1  0  5 
#4 p04 2  2  4 
#5 p05 3  6  7 

#$`3` 
# label id value1 value2 
#6 p06 1  0  8