Я пытаюсь создать переменную в одном длинном наборе данных (df1), где значение в каждой строке должно основываться на сопоставлении некоторых условий в другом длинном наборе данных (df2). Условия: - совпадение по «имени» - значение для df1 должно учитывать наблюдения для этого человека, которые произошли до наблюдения в df1. - Затем мне нужно количество строк в этом подмножестве, которые удовлетворяют третьему условию (в данных ниже, называемых «условием»)
Я уже пытался запустить цикл for (я знаю, не рекомендуется в R)записать это для каждой строки в 1: nrow (df1), но я продолжаю сталкиваться с проблемой, что в моих реальных данных df1 и df2 не имеют одинаковую длину или кратные.
Я также пытался написать функцию и применить ее к df1. Я попытался применить его с помощью apply, но я не могу принять два кадра данных в синтаксисе apply. Я попытался дать ему список данных и использовать lapply, но он возвращает нулевые значения.
Вот некоторые общие данные, которые соответствуют формату данных, с которыми я работаю.
df1 <- data.frame(
name = c("John Smith", "John Smith", "Jane Smith", "Jane Smith"),
date_b = sample(seq(as.Date('2014/01/01'), as.Date('2019/10/01'), by="day"), 4))
df2 <- data.frame(
name = c("John Smith", "John Smith", "Jane Smith", "Jane Smith"),
date_a = sample(seq(as.Date('2014/01/01'), as.Date('2019/10/01'), by="day"), 4),
condition = c("A", "B", "C", "A")
)
Я знаю, что способ получения количества строк может выглядеть примерно так:
num_conditions <- nrow(df2[which(df1$nam== df2$name & df2$date_a < df1$date_b & df2$condition == "A"), ])
То, что я хотел бы видеть в df1, это столбец с именем "num_conditions"«это показало бы число наблюдений в df2 для этого человека, которые произошли до date_b в df1 и выполнили условие« A ».
df1 должно выглядеть следующим образом:
name date_b num_conditions
John Smith 10/1/15 1
John Smith 11/15/16 0
John Smith 9/19/19 0