Используйте небольшой фрейм данных для запроса нескольких столбцов в большем фрейме данных и извлечения сводных данных в меньший фрейм данных - PullRequest
0 голосов
/ 19 октября 2019

Я хотел бы использовать небольшой фрейм данных с одним столбцом идентификаторов, чтобы идентифицировать информацию для суммирования из большего фрейма данных. Однако эти идентификаторы распределены по нескольким столбцам в большом кадре данных. Я попытался просто установить подмножество из более крупного информационного кадра, используя различные выражения group_by%>%, суммирующие выражения «n_distinct», но это занимает очень много времени, так как я группирую столбец за столбцом, и кажется, что должен быть более эффективный способ. Вот пример того, что я пытаюсь сделать:

маленький фрейм данных, который я хочу заполнить сводной информацией:

df1<-data.frame(ID=c("X0","X1","X2","X3","X4","X5","X6"))

ID
XO
X1
X2
X3
X4
X5
X6

больший фрейм данных Я хочу суммировать данные из

df2<-data.frame(P1=c("X1","X1","X1","X0","X0","X0","X4","X4","X2","X2","X2"),
P2=c("X0","X0","X0","X2","X2","X2","X1","X1","X1","X1","X1"),
P3=c("X2","X2","X2","X5","X5","X5","X2","X2","X0","X0","X0"),
P4=c("X3","X3","X3","X4","X4","X4","X3","X3","X4","X4","X4"),
G=c("1","1","1","1","1","1","2","2","2","2","2"),
NPO=c("1","0","0","1","0","0","1","0","1","0","0"),
PO=c("1","1","1","2","2","2","3","3","4","4","4"))

P1  P2  P3  P4  G  NPO PO
X1  X0  X2  X3  1   1   1
X1  X0  X2  X3  1   0   1
X1  X0  X2  X3  1   0   1
X0  X2  X5  X4  1   1   2
X0  X2  X5  X4  1   0   2
X0  X2  X5  X4  1   0   2
X4  X1  X2  X3  2   1   3
X4  X1  X2  X3  2   0   3
X2  X1  X0  X4  2   1   4
X2  X1  X0  X4  2   0   4
X2  X1  X0  X4  2   0   4

Из этого большего набора данных я хотел бы сопоставить X1, X2, X3 и т. Д. ... от небольшого информационного кадра до различных столбцов (P1, P2 и т. Д.) И найти, сколько уникальных "PO"Значения существуют для этого идентификатора и помещают этот вывод в небольшой информационный кадр в виде новой строки. Требуемый вывод:

ID  Gs POs
XO  2  3
X1  2  3
X2  2  4
X3  2  2
X4  2  3
X5  1  1
X6  0  0

G и PO указывают количество раз, когда идентификатор появлялся вместе с уникальным значением "G" или "PO". То, что разные столбцы «P» могут иметь одинаковые значения идентификатора «X», означает, что хотя идентификатор будет отображаться только один раз в одном столбце для одного и того же «PO», он может отображаться в разных столбцах для одного и того же «G». Если есть лучший способ сделать это путем поднабора большего набора данных, основанного на всех уникальных значениях от P1 до P4, в качестве единственной переменной «group_by», что также было бы очень полезно.

...