Транспонировать две переменные по группам - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть набор данных, который выглядит примерно так:

ID Group1 Group2 Group3 Time Var1 Var2
1    A      A1     A1.1   1    5   7
1    A      A1     A1.1   2    5   7
1    A      A1     A1.1   3    5   7
1    A      A1     A1.1   4    5   7
1    A      A1     A1.1   5    5   7
2    B      B1     B1.1   1    5   7
2    B      B1     B1.1   2    5   7
2    B      B1     B1.1   3    5   7
2    B      B1     B1.1   4    5   7
2    B      B1     B1.1   5    5   7
3    C      C1     C1.1   1    5   7
3    C      C1     C1.1   3    5   7
3    C      C1     C1.1   4    5   7
.
.
.

Мне бы хотелось, чтобы он выглядел следующим образом:

ID Group1 Group2 Group3 Time1 Time2 Time3...TimeN Time1 Time2 Time3...TimeN
1    A      A1     A1.1   5     5      5      5      7     7     7      7
2    B      A1     A1.1   5     5      5      5      7     7     7      7
3    C      A1     A1.1   5     5      5      5      7     7     7      7

Конечно, не все значения Var1 равны 5и не все значения Var2 равны 7 - просто показано, например.

Я хотел бы преобразовать данные так, чтобы каждая строка была уникальной для идентификатора, а Var1 и Var2 стали столбцами со строками, заполненными в соответствии с ID

Я пробовал

rave_subset <- reshape2::dcast(rave_subset, Group1 +
                          Group2 +
                          Group3 ~ Var1 + Var2, value.var = c("Var1", "Var2"))

Но это объединяет значения в Var1 и Var2 так, что они печатаются как "Var1_Var2"

Если я это сделаю:

rave_subset <- reshape2::dcast(rave_subset, Group1 +
                          Group2 +
                          Group3 ~ Var1, value.var = "Var1")

Тогда я получаю почти то, что хочу, за исключением того, что теряю Вар2

1 Ответ

0 голосов
/ 08 февраля 2019

Я закончил тем, что выполнил несколько итераций dcast и merge - работает, но не самый элегантный.

Код был следующим:

rave_subset <- subset(RAVE, !is.na(RAVE$Days) & RAVE$Days <= 180, select = c("Participant ID",
                                                          "Days",
                                                          "Randomized Treatment Group",
                                                          "AAV Type",
                                                          "ANCA Status - PR3 or MPO",
                                                          "BVAS",
                                                          "Glucocorticoid Dose (mg)",
                                                          "Cum. Pred Dose Since Last Visit (mg)",
                                                          "baseline_BVAS"))

rave_subset1 <- reshape2::dcast(rave_subset, `Participant ID` +
                                  `Randomized Treatment Group` +
                                  `AAV Type` +
                                  `ANCA Status - PR3 or MPO` +
                                  baseline_BVAS ~ Days, value.var = "BVAS")

rave_subset2 <- reshape2::dcast(rave_subset, `Participant ID` ~ Days , value.var = "Glucocorticoid Dose (mg)")

rave_subset3 <- reshape2::dcast(rave_subset, `Participant ID` ~ Days , value.var = "Cum. Pred Dose Since Last Visit (mg)")

rave_subset <- merge(x=rave_subset1,
                     y=rave_subset2,
                     by="Participant ID")

drops <- c("Randomized Treatment Group.y", "AAV Type.y", "ANCA Status - PR3 or MPO.y", "baseline_BVAS.y")
rave_subset <- rave_subset[,!(names(rave_subset) %in% drops)]

rave_subset <- merge(x=rave_subset,
                    y=rave_subset3,
                    by="Participant ID")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...