В настоящее время я пытаюсь найти векторизованный способ сопоставления по двум значениям в одной строке.У меня есть следующие два упрощенных фрейма данных:
# Dataframe 1: Displaying all my observations
df1 <- data.frame(c(1, 2, 3, 4, 5, 6, 7, 8),
c("A", "B", "C", "D", "A", "B", "A", "C"),
c("B", "E", "D", "A", "C", "A", "D", "A"))
colnames(df1) <- c("ID", "Number1", "Number2")
> df1
ID Number1 Number2
1 1 A B
2 2 B E
3 3 C D
4 4 D A
5 5 A C
6 6 B A
7 7 A D
8 8 C A
# Dataframe 2: Matrix of observations I am interested in
df2 <- matrix(c("A", "B",
"D", "A",
"C", "B",
"E", "D"),
ncol = 2,
byrow = TRUE)
> df2
[,1] [,2]
[1,] "A" "B"
[2,] "D" "A"
[3,] "C" "B"
[4,] "E" "D"
Я пытаюсь создать новый столбец в df1, в котором указано TRUE, только если в df2 присутствует точная комбинация (например, ID = 1эквивалентно первой строке в df2, потому что они оба состоят из A и B).Кроме того, если есть ярлык, я также хотел бы, чтобы статус был ИСТИНА, если числа поменялись местами, то есть df1 $ Number1 соответствует df2 [i, 2] и df1 $ Number2 соответствует df2 [i, 1] (например, для ID= 7, комбинация в df1 это A, D и в df2, комбинация D, A -> TRUE).
Мой желаемый результат выглядит так:
> df1
ID Number1 Number2 Status
1 1 A B TRUE
2 2 B E FALSE
3 3 C D FALSE
4 4 D A TRUE
5 5 A C FALSE
6 6 B A TRUE
7 7 A D TRUE
8 8 C A FALSE
ВсеЯ дошел до того, что это:
for (i in 1:nrow(df1)) {
for (j in 1:nrow(df2)) {
Status <- ifelse(df1$Number1[i] %in% df2[j,1] &&
df1$Number2[i] %in% df2[j,2], TRUE, FALSE)
StatusComb[i,j] <- Status
}
df1$Status[i] <- ifelse(any(StatusComb[i,]) == TRUE, TRUE, FALSE)
}
Это действительно неэффективно (вы можете ясно сказать, что я новичок в R) и тоже не очень хорошо выглядит.Буду признателен за любую помощь!