У меня есть фрейм данных, где я хочу сделать две отдельные сборки
library(tidyverse)
id <- c("A","B","C","D","E")
test_1_baseline <- c(1,2,4,5,6)
test_2_baseline <- c(21000, 23400, 26800,29000,30000)
test_1_followup <- c(0,4,2,3,1)
test_2_followup <- c(10000,12000,13000,15000,21000)
layout_1 <-data.frame(id,test_1_baseline,test_1_followup,test_2_baseline,test_2_followup)
Это текущая раскладка.У каждого человека есть 1 строка.Результат теста 1 на базовом уровне - одна переменная Результат теста 2 на базовом уровне - вторая переменная. То же самое относится и к последующим результатам теста 1/2
Я бы хотел, чтобы данные были более аккуратными.Один столбец для момента времени, один для результата теста A, один для результата теста B.
id2 <- c("A","B","C","D","E","A","B","C","D","E")
time <- c(rep("baseline",5),rep("followup",5))
test_1_result <- c(1,2,4,5,6,0,4,2,3,1)
test_2_result <- c(21000, 23400, 26800,29000,30000,10000,12000,13000,15000,21000)
layout_2 <- data.frame(id2, time,test_1_result,test_2_result)
В настоящее время я делаю то, что мне кажется странным, когда я в первую очередь собираю данные теста 1
test_1 <- select(layout_1,id,test_1_baseline,test_1_followup) %>%
gather("Timepoint","test_1",c(test_1_baseline,test_1_followup)) %>%
mutate(Timepoint = replace(Timepoint,Timepoint=="test_1_baseline", "baseline")) %>%
mutate(Timepoint = replace(Timepoint,Timepoint=="test_1_followup", "followup"))
Затем я делаю то же самое для теста 2 и присоединяюсь к ним
test_2 <- select(layout_1,id,test_2_baseline,test_2_followup) %>%
gather("Timepoint","test_2",c(test_2_baseline,test_2_followup)) %>%
mutate(Timepoint = replace(Timepoint,Timepoint=="test_2_baseline", "baseline")) %>%
mutate(Timepoint = replace(Timepoint,Timepoint=="test_2_followup", "followup"))
test_combined <- full_join(test_1,test_2)
Я попытался выполнить первый сбор, а затем второй на том же кадре данных, но затем вы получите дубликаты;т. е. вы получите
- ID 1 Test_1 Baseline Test_2 Baseline
- ID 1 Test_1 Baseline Test_2 Followup
- ID 1 Test_1 Контрольный тест_2
- BaselineID 1 Test_1 Followup Test_2 Followup == 4 строки, где должно быть только 2
Я чувствую, что для этого должен быть более понятный способ.Руководство приветствуется