我在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
有人知道这样做的方法吗?用作输入的数据帧的大小各不相同,因此我无法在行号的基础上创建子集。
答案 0 :(得分:0)
这个怎么样?首先,确定组成员身份:
library(tidyverse)
z <- posdata %>% mutate(ispron=(1*(pos=="PRON"))) %>%
mutate(group=cumsum(c(1, sign(diff(ispron)) > 0)))
网络,分为多个对象:
> 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.