我的数据框 df 的一行中有一个字符串,它在最后一个下划线之后有数字和字母。这些字母可以是 S T 或 Y,其后出现的数字表示蛋白质中发生磷酸化的位置,并且可以有 1 到 9 组。如果有多个字母并且复制了其他列,我希望该字符串被拆分。例如,
# Define the input strings
string1 <- "A01235_414_429_2_2_Y414T418S687"
string2 <- "C2"
string3 <- "C3"
# Create the dataframe
df <- data.frame(Column1 = string1, Column2 = string2, Column3 = string3)
# Print the dataframe
print(df)
# And the new code should yield;
print(new_df)
Column1 Column2 Column3
1 A01235_414_429_2_2_Y414 C2 C3
2 A01235_414_429_2_2_T418 C2 C3
3 A01235_414_429_2_2_S687 C2 C3
这是一个
dplyr
/tidyr
方法:
library(dplyr)
library(tidyr) # unnest
df %>%
mutate(last = sub(".*_", "", Column1), mult = regmatches(last, gregexpr("[TYS][0-9]+", last))) %>%
unnest(mult) %>%
mutate(Column1 = paste0(sub("_[^_]*$", "_", Column1), mult)) %>%
select(-last, -mult)
# # A tibble: 3 × 3
# Column1 Column2 Column3
# <chr> <chr> <chr>
# 1 A01235_414_429_2_2_Y414 C2 C3
# 2 A01235_414_429_2_2_T418 C2 C3
# 3 A01235_414_429_2_2_S687 C2 C3
可能(需要更多的正则表达式和更多的工作)使用
tidyr::separate_rows
,但由于没有明确的分隔符,我认为它的代码量与上面的代码量大致相同(如果不是更多的话)。