Я новичок в R, и кажется, что решение, которое я нашел для моей проблемы, занимает слишком много времени.
У меня есть 2 кадра:
UniqueID colA colB
1 x y
2 x y
3 x y
4 x y
И
UniqueID category date
1 a d1
1 a d2
1 b d3
2 c d4
3 a d5
3 a d6
Я хочу получить фрейм данных, который позже будет добавлен к первому, с чем-то вроде (при условии d1
UniqueID totaloccurrences occurrencescatA MindatecatA MaxdatecatA
1 3 2 d1 d2
2 1 0 0 0
3 2 2 d5 d6
Для каждого Id мне нужно подсчитать общее количество раз, которое оно появляется во втором кадре данных, а затем подсчитать, сколько появлений привязано к каждой категории, и записать более раннее и последнее наблюдение.
Лучшее, что я мог сделать, это использовать цикл for:
iteractions <- nrow(A)
for (i in 1:iteractions) {
compiled[i, "ID"] <- A[i, "UniqueID"]
compiled[i, "totaloccurrences"] <- length(B$UniqueID[B$UniqueID ==compiled[i, "ID"]])
compiled[i, "occurrencescatA"] <- length(B$UniqueID[B$UniqueID ==compiled[i, "ID"] & B$category == "d1"]
if (compiled[i, "occurencescatA"] != 0) {
compiled[i, "MindatecatA"] <- min(B$date[B$category =="a" & B$UniqueID ==compiled[i, "ID"]])
...
И так до максимальной даты, затем повторите для каждой категории.
Проблема в том, что кадры данных огромны, и это занимает очень много времени. Я считаю, что мне не хватает изящества, но любая помощь здесь будет признательна!