У меня большие данные, мини-версия выглядит следующим образом:
Pr1 <- c("AA", "BB", "BB", "BB", "BB", "--", "AA", "--")
Pr2 <- c("BB", "AA", "AA", "AA", "AA", "--", "--", "BB")
varA <- c("BB", "AA", "AA", "BB", "BB", "AA", "--", "BB")
varB <- c("AA", "BB", "AA", "BB", "BB", "AA", "--", "BB")
varC <- c("AB", "--", "AB", "BB", "AB", "AA", "--", "AB")
varD <- c("BB", "AA", "AB", "BB", "BB", "AB", "AB", "BB")
mydf <- data.frame (Pr1, Pr2, varA, varB, varC, varD)
Данные выглядят следующим образом:
mydf
Pr1 Pr2 varA varB varC varD
1 AA BB BB AA AB BB
2 BB AA AA BB -- AA
3 BB AA AA AA AB AB
4 BB AA BB BB BB BB
5 BB AA BB BB AB BB
6 -- -- AA AA AA AB
7 AA -- -- -- -- AB
8 -- BB BB BB AB BB
Мне нужно перекодировать остаток переменной в кадре данных на основе первых двух:
если элементы от varA до varD (конец набора данных) -
- равно значению Pr1, чем элементы varA-varD будут "A",
равно значению Pr2, чем элементы varA-varD будут "B"
не равно ни Pr1, ни Pr2, чем varA - varD будет "H"
однако - пропущенное значение, вышеприведенные правила в этом случае не применяются.
если либо Pr1, либо Pr2 отсутствуют (-), то результатом сравнения будет «NA» для всех значений.
Таким образом, ожидаемый результат:
Pr1 Pr2 varA varB varC varD
1 AA BB B A H B
2 BB AA B A -- B
3 BB AA B B H H
4 BB AA A A A A
5 BB AA A A H A
6 -- -- NA NA NA NA
7 AA -- NA NA NA NA
8 -- BB NA NA NA NA
Я мог бы найти способ выполнить это.