Матрица инцидентности для двудольных групп с несколькими объединениями
Мне было интересно, есть ли быстрый способ получить матрицу заболеваемости для такой проблемы. У меня есть два фрейма данных с тремя столбцами (ключи объединения)
df1 <- data.frame(K1=c(1,1,0,1,3,2,2),K2=c(1,2,1,0,2,0,1),K3=c(0,0,3,2,1,3,0))
df2 <- data.frame(K1=c(1,2,0,3),K2=c(0,1,2,0),K3=c(2,0,3,1))
и мне нужно получить соответствующую матрицу заболеваемости
# IM:
# 1 2 3 4
# 1 1 1 0 0
# 2 1 0 1 0
# 3 0 1 1 0
# 4 1 0 0 0
# 5 0 0 1 1
# 6 0 1 1 0
# 7 0 1 0 0
где это установлено 1
если есть совпадение между соответствующими KEY
(значение столбца) строк двух фреймов данных. Я бы сделал с помощью нескольких циклов
for (j in seq_len(nrow(df2)))
for (k in seq_len(ncol(df2))) {
if (df2[j,k])
m[which(df1[,k] == df2[j,k]),j] <- 1
}
но это подход C и, возможно, что-то быстрее в R. У вас есть другие идеи? Кроме того, когда data.frame довольно большой (около 50 тыс. И 20 тыс. Строк), я не могу выделить матрицу, так как она кажется слишком большой.