在R中给定变化条件的情况下连接行值



我正试图在R中给定不同条件的情况下连接某些行值(Strings(。我已标记了Flag中的行值(标记标准在本例中无关(。

符号:B是运行的开始,E则是结束0在运行之外1表示运行中除BE之外的任何字符串。你的解决方案不需要遵循我的惯例。

规则:每次跑步都必须以B开始,以E结束。运行中可以有任意数量的1。位于BE(包括首尾两个(之间的任何Strings都将按照它们在运行中的位置顺序进行连接,并替换B字符串0-字符串将保留在数据帧中1-和E-字符串将在串联后删除。

我还没有想出任何接近预期输出的东西。

set.seed(128)
df2 <- data.frame(Strings = sample(letters, 17, replace = T), 
Flag = c(0,"B",1,1,"E","B","E","B","E",0,"B",1,1,1,"E",0,0))
Strings Flag
1        d    0
2        r    B
3        q    1
4        r    1
5        v    E
6        f    B
7        y    E
8        u    B
9        c    E
10       x    0
11       h    B
12       w    1
13       x    1
14       t    1
15       j    E
16       d    0
17       j    0

中间输出。

Strings Flag    Result
1        d    0         d
2        r    B   r q r v
3        q    1         q
4        r    1         r
5        v    E         v
6        f    B       f y
7        y    E         y
8        u    B       u c
9        c    E         c
10       x    0         x
11       h    B h w x t j
12       w    1         w
13       x    1         x
14       t    1         t
15       j    E         j
16       d    0         d
17       j    0         j

所需输出。

Result
1         d
2   r q r v
3       f y
4       u c
5         x
6 h w x t j
7         d
8         j

这里有一个可能对您有所帮助的解决方案。然而,我仍然不确定我是否正确理解了你的观点:

library(dplyr)
df2 %>%
mutate(Flag2 = cumsum(Flag == 'B' | Flag == '0')) %>%
group_by(Flag2) %>%
summarise(Result = paste0(Strings, collapse = ' '))

# A tibble: 8 × 2
Flag2 Result   
<int> <chr>    
1     1 d        
2     2 r q r v  
3     3 f y      
4     4 u c      
5     5 x        
6     6 h w x t j
7     7 d        
8     8 j  

使用dplyr:

library(dplyr)
set.seed(128)
df2 <- data.frame(Strings = sample(letters, 17, replace = T), 
Flag = c(0,"B",1,1,"E","B","E","B","E",0,"B",1,1,1,"E",0,0))
df2 %>% 
group_by(group = cumsum( (Flag=="B") + (lag(Flag,1,"0")=="E"))) %>% 
mutate(Result=if_else(Flag=="B", paste0(Strings,collapse = " "),Strings)) %>% 
filter(!(Flag %in% c("1", "E"))) %>% ungroup() %>% 
select(-group, -Strings, -Flag)
#> # A tibble: 8 × 1
#>   Result   
#>   <chr>    
#> 1 d        
#> 2 r q r v  
#> 3 f y      
#> 4 u c      
#> 5 x        
#> 6 h w x t j
#> 7 d        
#> 8 j

相关内容

  • 没有找到相关文章

最新更新