管道R中的字符分割矢量-仅保留分割的第一部分

问题描述 投票:0回答:2

我以更大的字眼试图在其中一个列中拆分字符向量,以仅获得空格前的第一个单词。我试图通过以下方式解决:

 test <- tibble(ID = c("Monday March", "Tuesday March", "Wednesday March")) %>% 
          mutate(day = strsplit(ID, "\\s")[[1]][1]) 

但是我在新列中到处都有Monday

  ID              day   
  <chr>           <chr> 
1 Monday March    Monday
2 Tuesday March   Monday
3 Wednesday March Monday
r dplyr stringr
2个回答
2
投票

[您必须记住,默认情况下dplyr使用整个向量,如果您要进行rowise操作,只需添加rowise,如果您更喜欢使用map,我也提供了答案,说实话,我仍然为tidyverse脱离功能而感到痛苦编程,但更加简洁

library(tidyverse)

test <- tibble(ID = c("Monday March", "Tuesday March", "Wednesday March")) %>%
  rowwise() %>% 
  mutate(day = strsplit(ID, "\\s")[[1]][1]) 


# old school

test <- tibble(ID = c("Monday March", "Tuesday March", "Wednesday March")) %>%
  mutate(day = map_chr(ID,~strsplit(.x, "\\s")[[1]][1])) 

0
投票

这是使用separate的快捷方式。如果您不想保留要拆分的文本的第二部分,则只需为其定义一列。

> test <- tibble(ID = c("Monday March", "Tuesday March", "Wednesday March")) %>% 
+   separate(ID, into='day', remove=F)
Warning message:
Expected 1 pieces. Additional pieces discarded in 3 rows [1, 2, 3]. 
> test
# A tibble: 3 x 2
  ID              day      
  <chr>           <chr>    
1 Monday March    Monday   
2 Tuesday March   Tuesday  
3 Wednesday March Wednesday
© www.soinside.com 2019 - 2024. All rights reserved.