Я не могу связать вывод функции слияния в SAS с какой-либо из известных мне концепций: внутренним, внешним, левым или правым внешним, перекрестным соединением или антисоединением.Я пытаюсь получить вывод в R, но не знаю, как это сделать.
Код объединяет два набора данных, используя одну переменную.Эта переменная имеет одно и то же значение в обоих наборах данных.Насколько я понимаю, это должно быть слияние один-ко-многим, но выход имеет то же количество строк, что и второй набор данных.
Код SAS
data xyz;
merge dt1(in = INA) dt2(in = INB);
by STUDENT;
или
data xyz;
merge dt1(in = INA) dt2(in = INB);
by STUDENT;
if INA = 1;
run;
Мой код R
dt2<- data.frame(Student = c(6,6,6,6,6,6,6,6,6),
RollNum2 = c(58,69,45, 38,88,73,33,99,29),
Marks2= c(8,9,10,3,5,7,8,8,9))
dt1<- data.frame(Student = c(6,6,6),
RollNum1 = c(49,69,44),
Marks1= c(8,9,10))
Я пытался
xyz <- merge(x = dt1,
y = dt2,
by = "Student"
all = TRUE,
allow.cartesian = TRUE)
или
xyz <- merge(x = dt1,
y = dt2,
by = "STUDENT"
all.x = TRUE,
allow.cartesian = TRUE)
или
xyz <- left_join(dt1, dt2, by = c("STUDENT"))
INPUT
dt1
Student RollNum1 Marks1
6 49 8
6 69 9
6 44 10
dt2
Student RollNum2 Marks2
6 58 8
6 69 9
6 45 10
6 38 3
6 88 5
6 73 7
6 33 8
6 99 8
6 29 9
ВЫХОД
ЖЕЛАЕМЫЙ ВЫХОД (КАК ЭТО НАХОДИТСЯ В SAS)
STUDENT RollNum1 Marks1 RollNum1 Marks2
6 49 8 58 8
6 69 9 69 9
6 44 10 45 10
6 44 10 38 3
6 44 10 88 5
6 44 10 73 7
6 44 10 33 8
6 44 10 99 8
6 44 10 29 9
Как мы видим, первые два ряда dt1 связываются с первыми двумя рядами dt2, а для остальных рядов третий ряд dt1 связывается со всемиряды dt2.Конечное количество выходных строк совпадает с количеством строк в dt2.
R вывод с левым слиянием / объединением (НЕ ТРЕБУЕТСЯ ВЫХОД)
ВЫХОД (НЕ ЖЕЛАЕТСЯ - результаты один ко многим с 27 строками)
student roll.no.x marks2.x roll.no.y marks2.y
1: 6 49 8 58 8
2: 6 49 8 69 9
3: 6 49 8 45 10
4: 6 49 8 38 3
5: 6 49 888 5
6: 6 49 8 73 7
7: 6 49 8 33 8
8: 6 49 8 99 8
9: 649 8 29 9
10: 6 69 9 58 8
11: 6 69 9 69 9
12: 6 69 9 45 10
13: 6 69 9 38 3
14: 6 69 9 88 5
15: 6 69 9 73 7
16: 6 69 9 33 8
17: 6 69 9 99 8
18: 6 69 9 29 9
19: 6 44 10 58 8
20: 6 44 10 69 9
21: 6 44 10 45 10
22: 6 44 10 38 3
23: 6 44 10 88 5
24: 6 44 10 73 7
25: 6 44 10 33 8
26: 6 4410 99 8
27: 6 44 10 29 9