R подмножество рядов строк ниже определенной строки - PullRequest
0 голосов
/ 26 июня 2018

У меня есть несколько фреймов данных в R следующей формы:

> pos.sentence
   doc_id token_id   token   pos
1      d1        1      Ik  PRON
2      d1        2    weet  VERB
3      d1        3     dat SCONJ
4      d1        4     jij  PRON
5      d1        5     dat SCONJ
6      d1        6     wil   AUX
7      d1        7      en CCONJ
8      d1        8      ik  PRON
9      d1        9     heb   AUX
10     d1       10     het   DET
11     d1       11      al   ADV
12     d1       12 gekocht  VERB

Что я хотел бы сделать, это создать подмножества данных, где все строки из PRON (который появляется в столбце pos)до следующего экземпляра PRON собраны.Таким образом, в данном случае получается три отдельных подмножества / фрейма данных:

   doc_id token_id   token   pos
1      d1        1      Ik  PRON
2      d1        2    weet  VERB
3      d1        3     dat SCONJ

   doc_id token_id   token   pos
4      d1        4     jij  PRON
5      d1        5     dat SCONJ
6      d1        6     wil   AUX
7      d1        7      en CCONJ

   doc_id token_id   token   pos
8      d1        8      ik  PRON
9      d1        9     heb   AUX
10     d1       10     het   DET
11     d1       11      al   ADV
12     d1       12 gekocht  VERB

Есть ли кто-нибудь, кто знает способ сделать это?Фреймы данных, служащие моим входом, различаются по размеру, поэтому я не могу создавать подмножества на основе номера строки.

1 Ответ

0 голосов
/ 26 июня 2018

Как насчет этого?Сначала определите членство в группе:

library(tidyverse)
z <- posdata %>% mutate(ispron=(1*(pos=="PRON"))) %>% 
    mutate(group=cumsum(c(1, sign(diff(ispron)) > 0)))

Net, разбейте на несколько объектов:

> split(z,z$group) 
$`1`
# A tibble: 3 x 6
  doc_id token_id token pos   ispron group
  <fct>     <int> <fct> <fct>  <dbl> <dbl>
1 d1            1 Ik    PRON      1.    1.
2 d1            2 weet  VERB      0.    1.
3 d1            3 dat   SCONJ     0.    1.

$`2`
# A tibble: 4 x 6
  doc_id token_id token pos   ispron group
  <fct>     <int> <fct> <fct>  <dbl> <dbl>
1 d1            4 jij   PRON      1.    2.
2 d1            5 dat   SCONJ     0.    2.
3 d1            6 wil   AUX       0.    2.
4 d1            7 en    CCONJ     0.    2.

$`3`
# A tibble: 5 x 6
  doc_id token_id token   pos   ispron group
  <fct>     <int> <fct>   <fct>  <dbl> <dbl>
1 d1            8 ik      PRON      1.    3.
2 d1            9 heb     AUX       0.    3.
3 d1           10 het     DET       0.    3.
4 d1           11 al      ADV       0.    3.
5 d1           12 gekocht VERB      0.    3.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...