在 R 中将一个字符串拆分为两行或更多行,同时复制其他列

问题描述 投票:0回答:1

我的数据框 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
r string split
1个回答
0
投票

这是一个

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
,但由于没有明确的分隔符,我认为它的代码量与上面的代码量大致相同(如果不是更多的话)。

© www.soinside.com 2019 - 2024. All rights reserved.