Tidyr:删除字符串直到某个字符

时间:2020-09-19 15:41:43

标签: r tidyverse tidyr

在特定字符之前删除字符串的最简单方法是什么?

数据如下:

library(tidyverse)

df <- data.frame(var1 = c("lang:10,q1:10,m2:20,q3:20,m5:10",
                          "lang:1,q1:10,m2:20,m3:20,q3:10",
                          "lang:100,q1:10,m2:20")) 

现在,我想删除每一行开头的“ lang:xy”部分。 我尝试使用“分隔”,但之后也使用了逗号(第一个逗号之后的所有内容都应保持在一起)。

所以我想要的输出是:

var1
-------------------------
q1:10,m2:20,q3:20,m5:10
q1:10,m2:20,m3:20,q3:10",
q1:10,m2:20

谢谢!

4 个答案:

答案 0 :(得分:1)

您可以使用str_remove包中的stringr

df %>%
  mutate(
    var1 = var1 %>% str_remove("^lang:[0-9]*,")
  )

答案 1 :(得分:1)

或尝试以下操作:

library(tidyverse)
#Code
df %>% mutate(id=1:n()) %>%separate_rows(var1,sep = ',') %>%
  filter(!grepl('lang',var1)) %>%
  mutate(var='var') %>%
  group_by(id) %>%
  summarise(var1=paste0(var1,collapse = ',')) %>% ungroup() %>%
  select(-id)

输出:

# A tibble: 3 x 1
  var1                   
  <chr>                  
1 q1:10,m2:20,q3:20,m5:10
2 q1:10,m2:20,m3:20,q3:10
3 q1:10,m2:20   

答案 2 :(得分:1)

仅需四舍五入,基于R的sub函数在这里也可以工作:

df$var1 <- sub("^lang:\\d+,", "", df$var1)
df

                     var1
1 q1:10,m2:20,q3:20,m5:10
2 q1:10,m2:20,m3:20,q3:10
3             q1:10,m2:20

答案 3 :(得分:1)

我们可以使用trimws中的base R

df$var1 <- trimws(df$var1, whitespace = "lang:\\d+,")