我有以下几点:
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
(如果存在)。决赛桌看起来像这样:
sample colB colC
foo 1 2
bar 2 3
qux.ID 3 4
dog 1 1
我怎样才能实现这一目标?
答案 0 :(得分: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
如果“示例”列为factor
类,我们可以在factor
的输出上使用gsub
换行,或者在样本的levels
上执行此操作
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