如何使用 dplyr 和 stringr 替换特定列中每一行的字符串
How to replace string for every row in specfic column using dplyr and stringr
我有以下问题:
library(tidyverse)
df <- tibble::tribble(
~sample, ~colB, ~colC,
"foo", 1, 2,
"bar_x", 2, 3,
"qux.6hr.ID", 3, 4,
"dog", 1, 1
)
df
#> # A tibble: 4 x 3
#> sample colB colC
#> <chr> <dbl> <dbl>
#> 1 foo 1 2
#> 2 bar_x 2 3
#> 3 qux.6hr.ID 3 4
#> 4 dog 1 1
df <- factor(final_df$samples, levels=c("bar_x","foo","qux.6hr.ID","dog"))
df
#> [1] foo bar_x qux.6hr.ID dog
#> Levels: bar_x foo qux.6hr.ID dog
我想要做的是对 sample
列中的每一行删除这些子字符串:_x
和 .6hr
(如果存在)。最后的 table 看起来像这样:
sample colB colC
foo 1 2
bar 2 3
qux.ID 3 4
dog 1 1
我怎样才能做到这一点?
我们可以使用
df %>%
mutate(sample = gsub("_x|\.\d+[A-Za-z]+", "", sample))
# A tibble: 4 x 3
# sample colB colC
# <chr> <dbl> <dbl>
#1 foo 1 2
#2 bar 2 3
#3 qux.ID 3 4
#4 dog 1 1
如果 'sample' 列是 factor
class 我们可以在 gsub
的输出上用 factor
换行或者在 [=样本
的 15=]
levels(df$sample) <- gsub("_x|\.\d+[A-Za-z]+", "", levels(df$sample))
df$sample
#[1] foo bar qux.ID dog
#Levels: bar foo qux.ID dog
这里是一个使用 purrr:map 函数的解决方案,它具有返回相同结果的额外好处,无论“sample”是 chr 还是 factor。
df %>%
mutate(sample = map_chr(sample, ~str_replace(.x,
pattern = "_x|\.\d+[A-Za-z]+",
replacement = "")))
# A tibble: 4 x 3
# sample colB colC
# <chr> <dbl> <dbl>
#1 foo 1 2
#2 bar 2 3
#3 qux.ID 3 4
#4 dog 1 1
我有以下问题:
library(tidyverse)
df <- tibble::tribble(
~sample, ~colB, ~colC,
"foo", 1, 2,
"bar_x", 2, 3,
"qux.6hr.ID", 3, 4,
"dog", 1, 1
)
df
#> # A tibble: 4 x 3
#> sample colB colC
#> <chr> <dbl> <dbl>
#> 1 foo 1 2
#> 2 bar_x 2 3
#> 3 qux.6hr.ID 3 4
#> 4 dog 1 1
df <- factor(final_df$samples, levels=c("bar_x","foo","qux.6hr.ID","dog"))
df
#> [1] foo bar_x qux.6hr.ID dog
#> Levels: bar_x foo qux.6hr.ID dog
我想要做的是对 sample
列中的每一行删除这些子字符串:_x
和 .6hr
(如果存在)。最后的 table 看起来像这样:
sample colB colC
foo 1 2
bar 2 3
qux.ID 3 4
dog 1 1
我怎样才能做到这一点?
我们可以使用
df %>%
mutate(sample = gsub("_x|\.\d+[A-Za-z]+", "", sample))
# A tibble: 4 x 3
# sample colB colC
# <chr> <dbl> <dbl>
#1 foo 1 2
#2 bar 2 3
#3 qux.ID 3 4
#4 dog 1 1
如果 'sample' 列是 factor
class 我们可以在 gsub
的输出上用 factor
换行或者在 [=样本
levels(df$sample) <- gsub("_x|\.\d+[A-Za-z]+", "", levels(df$sample))
df$sample
#[1] foo bar qux.ID dog
#Levels: bar foo qux.ID dog
这里是一个使用 purrr:map 函数的解决方案,它具有返回相同结果的额外好处,无论“sample”是 chr 还是 factor。
df %>%
mutate(sample = map_chr(sample, ~str_replace(.x,
pattern = "_x|\.\d+[A-Za-z]+",
replacement = "")))
# A tibble: 4 x 3
# sample colB colC
# <chr> <dbl> <dbl>
#1 foo 1 2
#2 bar 2 3
#3 qux.ID 3 4
#4 dog 1 1