#r #flatten
Вопрос:
Я пытаюсь выровнять/расширить свой фрейм данных для сортировки по имени образца. По каждому отдельному образцу было проведено несколько испытаний, и я хотел бы объединить все испытания в один ряд.
Примеры данных:
Sample_Name lt;- c("M1","M1","M1","M1","M2","M2","M2","M2") test_ID lt;- c("Gen1 Spec1", "Gen2 Spec2", "Gen2 Spec2", "Gen2 Spec2", "Gen3 Spec3", "Gen3 Spec3", "Gen4 Spec4", "Gen4 Spec4") MScore lt;- c(2.2, 1.9, 2.1, 2.0, 1.0, 2.0, 1.4, 1.5) Test_Data lt;-data.frame(Sample_Name, test_ID, MScore)
Форма моего желаемого результата:
Target_Sample_Name lt;-c("M1","M2") Trial_1_ID lt;-c("Gen1 Spec1", "Gen2 Spec2") Trial_1_Score lt;-c(2.2, 1.0) Trial_2_IDlt;-c("Gen2 Spec2", "Gen3 Spec3") Trial_2_Scorelt;-c(1.9, 2.0) Trial_3_IDlt;-c("Gen2 Spec2", "Gen4 Spec4" ) Trial_3_Scorelt;-c(2.1 , 1.4) Trial_4_IDlt;-c("Gen2 Spec2","Gen4 Spec4" ) Trial_4_Scorelt;-c(2.0, 1.5 ) Desired_Output lt;- data.frame(Target_Sample_Name, Trial_1_ID, Trial_1_Score, Trial_2_ID, Trial_2_Score, Trial_3_ID, Trial_3_Score, Trial_4_ID, Trial_4_Score)
Я уверен, что есть лучший способ на самом деле показать, что я хочу сделать, но я супер новичок и еще не нашел его.
Я пытался использовать aggregate, но не могу понять, какое УДОВОЛЬСТВИЕ использовать. Я также пытался использовать функцию tibble pivot_wider, но не смог заставить ее работать. Я понимаю, что это довольно странный способ организации моих данных, но я обещаю, что это имеет смысл в контексте моего проекта!
Спасибо!
Комментарии:
1. Я не уверен, но я думаю, что ваш желаемый результат неверен? Ибо
M2
я получаюGen3 Spec3
как Trail_1_ID вместоGen2 Spec2
того, кому принадлежитM1
.
Ответ №1:
Вы могли бы использовать
library(dplyr) library(tidyr) Test_Data %gt;% group_by(Sample_Name) %gt;% mutate(rn = row_number()) %gt;% pivot_wider(id_cols = Sample_Name, names_from = rn, names_glue = "{.value}_{rn}", values_from = c("test_ID", "MScore")) %gt;% rename_with(~gsub("test_ID_(\d )", "Trail_\1_ID", .x), starts_with("test_ID")) %gt;% rename_with(~gsub("MScore_(\d )", "Trail_\1_Score", .x), starts_with("MScore")) %gt;% select(colnames(.)[order(colnames(.))]) %gt;% ungroup()
Это возвращает
# A tibble: 2 x 9 Sample_Name Trail_1_ID Trail_1_Score Trail_2_ID Trail_2_Score Trail_3_ID Trail_3_Score lt;chrgt; lt;chrgt; lt;dblgt; lt;chrgt; lt;dblgt; lt;chrgt; lt;dblgt; 1 M1 Gen1 Spec1 2.2 Gen2 Spec2 1.9 Gen2 Spec2 2.1 2 M2 Gen3 Spec3 1 Gen3 Spec3 2 Gen4 Spec4 1.4 # ... with 2 more variables: Trail_4_ID lt;chrgt;, Trail_4_Score lt;dblgt;