从dplyr管道中数据框的列行的下划线后替换文本

时间:2018-06-25 17:02:41

标签: r dplyr tidyverse stringr

df示例:

 a = c("a_1", "b_1", "b_2", "b_3", "c_1")
 b = c(1,2,3,4,5)
 df = cbind.data.frame(a,b)

如何在dplyr管道中使用str_replace替换_之后(包括_)的所有文本?

以下内容无效:

df_1 = df %>% filter(b >= 1.5) %>% str_replace_all(df$a, "_*", "")

1 个答案:

答案 0 :(得分:2)

您缺少.,请改用_.*。由于_*匹配零个或多个下划线,因此注意*是一个量词,用于指定直接前字符的数量;而_.*匹配一个下划线,然后.*之后的所有内容,因为.匹配一个普通字符;

df %>% mutate(new_a = str_replace(a, '_.*', as.character(b)))

#    a b new_a
#1 a_1 1    a1
#2 b_1 2    b2
#3 b_2 3    b3
#4 b_3 4    b4
#5 c_1 5    c5

或者如果您只是想删除结尾部分:

df %>% mutate(new_a = str_replace(a, '_.*', ''))

#    a b new_a
#1 a_1 1     a
#2 b_1 2     b
#3 b_2 3     b
#4 b_3 4     b
#5 c_1 5     c