我以更大的字眼试图在其中一个列中拆分字符向量,以仅获得空格前的第一个单词。我试图通过以下方式解决:
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
[您必须记住,默认情况下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]))
这是使用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