根据行中的模式添加后缀

  • 本文关键字:模式 添加 后缀 r
  • 更新时间 :
  • 英文 :


我有一个data.frame,看起来像这样:

names         value1          Value2       
S1_xxx-1        9.65            1.24
S1_xxx-1        1.15            3.64
S1_xxx-1        3.05            1.65
S2_xxx-1        7.12            6.109
S2_xxx-1        8.9             6.03
S2_xxx-1        4.23            2.10
.......        ......          ......

与S*从S1到S16和_xxx-是一些字母。是否有一种方法可以在第一列上获得以下输出?

names           value1          Value2       
S1_xxx-1-0        9.65            1.24
S1_xxx-1-0        1.15            3.64
S1_xxx-1-0        3.05            1.65
S2_xxx-1-1        7.12            6.109
S2_xxx-1-1        8.9             6.03
S2_xxx-1-1        4.23            2.10
.......        ......          ......

。当有S1*时,我想在所有具有S1*的行中添加-0作为后缀。同样地,当有S2*时,我想在所有有S2*的行上加上-1作为后缀,以此类推,直到S16*有-15作为后缀。提前谢谢你

我们用'names'提取parse_number,减去1和paste的数字

df1$names <- with(df1, paste0(names, '-', readr::parse_number(names) -1))
df1$names
#[1] "S1_xxx-1-0" "S1_xxx-1-0" "S1_xxx-1-0" "S2_xxx-1-1" "S2_xxx-1-1" "S2_xxx-1-1"

tidyverse

类似选项
library(dplyr)
library(stringr)
df1 %>%
mutate(names = str_c(names, readr::parse_number(names), sep = '-'))

数据
df1 <- structure(list(names = c("S1_xxx-1", "S1_xxx-1", "S1_xxx-1", 
"S2_xxx-1", "S2_xxx-1", "S2_xxx-1"), value1 = c(9.65, 1.15, 3.05, 
7.12, 8.9, 4.23), Value2 = c(1.24, 3.64, 1.65, 6.109, 6.03, 2.1
)), class = "data.frame", row.names = c(NA, -6L))

最新更新