Как объединить 2 кадра данных на R на основе 2 столбцов? - PullRequest
0 голосов
/ 10 июля 2019

Я собираюсь объединить 2 фрейма данных на основе 2 столбцов в R. Эти два фрейма данных называются popr и drop column и имеют одинаковые 2 переменные: USUBJID и TRTAG2N, которые являются переменные, которые я хочу объединить 2 кадра данных.

Функция слияния работает, когда я пытаюсь сделать это только на основе одного столбца:

merged <- merge(popr,droppedcol,by="USUBJID")

Когда я пытаюсь объединить, используя 2 столбца и просматривая фрейм данных «Длительность», таблица пуста и значений нет, только заголовки столбцов. Там написано "нет данных в таблице".

Мне поручено повторить код SAS для этого в R:

data duration;
  set pop combined1 ;
  by usubjid trtag2n;
run;

На R я пробовал следующее

duration<- merge(popr,droppedcol,by.x="USUBJID","TRTAG2N",by.y="USUBJID","TRTAG2N")

duration <- merge(popr,droppedcol,by.x="USUBJID","TRTAG2N",by.y="USUBJID","TRTAG2N")

duration <- full_join(popr,droppedcol,by = c("USUBJID","TRTAG2N"))

duration <- merge(popr,droppedcol,by = c("USUBJID","TRTAG2N"))

Я хотел бы видеть фрейм данных со столбцами USUBJID, TRTAG2N, TRTAG2 и FUDURAG2, отсортированный сначала по FUDURAG2, а затем по USUBJID.

1 Ответ

0 голосов
/ 10 июля 2019

Согласно документации SAS, Объединение наборов данных SAS и подтвержденное гуру SAS @Tom в комментариях выше, set с by просто означает, что вы чередуете наборы данных. Нет merge (кстати, это также метод SAS, который вы не используете):

Чередование использует оператор SET и оператор BY для объединения несколько наборов данных в один новый набор данных. Количество наблюдений в новом наборе данных есть сумма числа наблюдений от исходные наборы данных. Тем не менее, наблюдения в новом наборе данных упорядочены по значениям переменной BY или переменных и каждая группа BY по порядку наборов данных, в которых они встречаются. Вы может чередовать наборы данных либо с помощью переменной BY, либо с помощью индекс.

Следовательно, лучший перевод set без by в R - rbind(), а set с by - rbind + order (в строках):

duration <- rbind(pop, combined1)                                # STACK DFs
duration <- with(duration, duration[order(usubjid, trtag2n),])   # ORDER ROWS

Тем не менее, обратите внимание: rbind не допускает сопоставления столбцов между объединенными наборами данных. Однако сторонние пакеты допускают несопоставимые столбцы, включая: plyr::rbind.fill, dplyr::bind_rows, data.table::rbindlist.

...