多个变量的Pivot_longer

时间:2020-07-20 09:37:28

标签: r dplyr tidyr

我正在尝试整理几个样本中已鉴定肽序列的数据框:

Sample_Elu_HNSample_LW_HNSample_Elu_HMSample_LW_HMSample_Elu_M1Sample_LW_M1Sample_Elu_M2Sample_LW_M2Sample_Elu_N1Sample_LW_N1Sample_Elu_N2Sample_LW_N2Control_Preload_None

数据框包含每个肽段的信息,包括每个样品中它们的丰度以及其鉴定的信心。

names <- c("Sequence", "Modifications", "Master Protein Accessions","Missed Cleavages",
           "Abundance: Mean: Control, None, Preload","Abundance: SD: Control, None, Preload","Abundance: CV: Control, None, Preload",
           "Abundance: Mean: Sample, HM, Elu","Abundance: SD: Sample, HM, Elu","Abundance: CV: Sample, HM, Elu",
           "Abundance: Mean: Sample, HN, Elu","Abundance: SD: Sample, HN, Elu","Abundance: CV: Sample, HN, Elu",
           "Abundance: Mean: Sample, M1, Elu","Abundance: SD: Sample, M1, Elu","Abundance: CV: Sample, M1, Elu",
           "Abundance: Mean: Sample, M2, Elu","Abundance: SD: Sample, M2, Elu","Abundance: CV: Sample, M2, Elu",
           "Abundance: Mean: Sample, N1, Elu","Abundance: SD: Sample, N1, Elu","Abundance: CV: Sample, N1, Elu",
           "Abundance: Mean: Sample, N2, Elu","Abundance: SD: Sample, N2, Elu","Abundance: CV: Sample, N2, Elu",
           "Abundance: Mean: Sample, HM, LW","Abundance: SD: Sample, HM, LW","Abundance: CV: Sample, HM, LW",
           "Abundance: Mean: Sample, HN, LW","Abundance: SD: Sample, HN, LW","Abundance: CV: Sample, HN, LW",
           "Abundance: Mean: Sample, M1, LW","Abundance: SD: Sample, M1, LW","Abundance: CV: Sample, M1, LW",
           "Abundance: Mean: Sample, M2, LW","Abundance: SD: Sample, M2, LW","Abundance: CV: Sample, M2, LW",
           "Abundance: Mean: Sample, N1, LW","Abundance: SD: Sample, N1, LW","Abundance: CV: Sample, N1, LW",
           "Abundance: Mean: Sample, N2, LW","Abundance: SD: Sample, N2, LW","Abundance: CV: Sample, N2, LW",
           "Found in Sample Group: Control, Preload, None","Found in Sample Group: Sample, Elu, HM",
           "Found in Sample Group: Sample, Elu, HN","Found in Sample Group: Sample, Elu, M1",
           "Found in Sample Group: Sample, Elu, M2","Found in Sample Group: Sample, Elu, N1",
           "Found in Sample Group: Sample, Elu, N2","Found in Sample Group: Sample, LW, HM",
           "Found in Sample Group: Sample, LW, HN","Found in Sample Group: Sample, LW, M1",
           "Found in Sample Group: Sample, LW, M2","Found in Sample Group: Sample, LW, N1",
           "Found in Sample Group: Sample, LW, N2")
peptide1 <- c("FQSEEQQQTEDELQDK","1xPhospho [S3(100)]","P02666",0,591079706.5,129831141.4,21.96508186,92078374.7,5559797.773,6.038114585,130764801.6,11101742.04,8.489854991,304661843.6,89701289.78,29.44290257,100024065.8,174405.3367,0.174363375,20777445.26,7953029.115,38.27722329,43696929.72,10030935.24,22.95569805,496031039,260945694.4,52.60672697,111323285.3,32961482.23,29.60879402,329268465.6,243189584.2,73.85753864,478737037.1,153121463.4,31.98446151,701372889.6,20000942.58,2.851684585,847417746,84344510.23,9.953120599,"High","High","High","High","High","High","High","High","High","Found","High","High","High")
peptide2 <- c("HPGDFGADAQGAMTK","1xPhospho [H1(100)]","P68082",0,295017576,49088902.73,16.63931464,2845912.875,709262.9265,24.92215882,3659951.5,215619.485,5.891320828,41946172,301640.4391,0.719113151,9336196.75,1507110.776,16.14266298,1469308.375,434213.7682,29.55225572,1607320,498424.3673,31.00965379,191151516,137956380.3,72.17121954,236416096,97608884.31,41.28690303,119327816,55998433.41,46.92823123,152802424,9555841.041,6.253723462,147086456,33874815.85,23.03054732,255244232,75472108.91,29.56858548,"High","High","High","High","High","High","High","High","High","Not Found","High","Not Found","High")
peptide3 <- c("IEKFQSEEQQQTEDELQDK","","P02666",1,75099003,12104439.14,16.11797582,18015945.88,6770542.657,37.58083369,7913736.75,4197999.975,53.04700053,46005954.5,8581332.638,18.65265645,14313846.5,4426286.925,30.92311298,5085692.75,528187.9059,10.38576123,7676983.313,3681526.619,47.95538129,24546758.5,13126407.14,53.47511419,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,9098671.051,22.39353163,31170934,NA,NA,"High","High","High","High","High","High","High","Not Found","Not Found","Not Found","High","Not Found","High")

example.data <- as.data.frame(rbind(peptide1, peptide2, peptide3))
colnames(example.data) <- names
example.data

我想要的是将列"Abundance: Mean: ...""Abundance: SD: ...""Abundance: CV:...""Found in Sample Group: ..."收集到"Mean""SD",{{1 }}和"CV"

这是我尝试过的:

"Found"

但是,它在不同的行中将平均值,标准差和CV值与“找到的”值分开,留下了很多NA值...

什么是固定的,以便所有变量的所有值都包含在同一行中?

一如既往地感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您需要将要堆叠的名称更改为单个模式。

library(dplyr)
library(tidyr)

example.data %>%
  rename_with(~ sub(".+?:\\s", "", .), starts_with("Abundance")) %>%
  rename_with(~ sub(".+:(.+),(.+),(.+)", "Found:\\1,\\3,\\2", .), starts_with("Found")) %>% 
  pivot_longer(-(1:4), names_to = c(".value", "Set"), names_sep = ":\\s") %>%
  separate(Set, c("Sample", "Polymer", "Fraction"))

# # A tibble: 39 x 11
#    Sequence       Modifications      `Master Protein Accessi… `Missed Cleavages` Sample Polymer Fraction Mean      SD        CV        Found
#    <chr>          <chr>              <chr>                    <chr>              <chr>  <chr>   <chr>    <chr>     <chr>     <chr>     <chr>
#  1 FQSEEQQQTEDEL… 1xPhospho [S3(100… P02666                   0                  Contr… None    Preload  59107970… 12983114… 21.96508… High 
#  2 FQSEEQQQTEDEL… 1xPhospho [S3(100… P02666                   0                  Sample HM      Elu      92078374… 5559797.… 6.038114… High 
#  3 FQSEEQQQTEDEL… 1xPhospho [S3(100… P02666                   0                  Sample HN      Elu      13076480… 11101742… 8.489854… High 
#  4 FQSEEQQQTEDEL… 1xPhospho [S3(100… P02666                   0                  Sample M1      Elu      30466184… 89701289… 29.44290… High 
#  5 FQSEEQQQTEDEL… 1xPhospho [S3(100… P02666                   0                  Sample M2      Elu      10002406… 174405.3… 0.174363… High 
#  6 FQSEEQQQTEDEL… 1xPhospho [S3(100… P02666                   0                  Sample N1      Elu      20777445… 7953029.… 38.27722… High 
#  7 FQSEEQQQTEDEL… 1xPhospho [S3(100… P02666                   0                  Sample N2      Elu      43696929… 10030935… 22.95569… High 
#  8 FQSEEQQQTEDEL… 1xPhospho [S3(100… P02666                   0                  Sample HM      LW       496031039 26094569… 52.60672… High 
#  9 FQSEEQQQTEDEL… 1xPhospho [S3(100… P02666                   0                  Sample HN      LW       11132328… 32961482… 29.60879… High 
# 10 FQSEEQQQTEDEL… 1xPhospho [S3(100… P02666                   0                  Sample M1      LW       32926846… 24318958… 73.85753… Found
# # … with 29 more rows

您的数据中存在陷阱。以Found开头的那些列应重命名以匹配其他列的模式。例如

Found in Sample Group: Sample, Elu, HM

应重命名为

Found in Sample Group: Sample, HM, Elu

以此类推。