как сопоставить горизонтальное и вертикальное значение с уникальным идентификатором в R - PullRequest
0 голосов
/ 23 мая 2018

У меня есть нижеупомянутый фрейм данных:

ID      Final       Val1    Val2    Val3    Val4     Val5
P-1     A           A       0               0        0
P-2     A           0       A               B        
P-2     B           0       A               B        
P-3     A           A       B               B        B
P-3     B           A       B               B        B
P-3     B           A       B               B        B

Я просто хочу проверить, что для каждого уникального идентификатора имеется то же число значений, что и Final.

Требуется вывод:

ID      Final       Val1    Val2    Val3    Val4     Val5  Status
P-1     A           A       0               0        0     True
P-2     A           0       A               B              True
P-2     B           0       A               B              True
P-3     A           A       B               B        B     False
P-3     B           A       B               B        B     False
P-3     B           A       B               B        B     False

1 Ответ

0 голосов
/ 23 мая 2018

Мы могли бы gather в «длинный» формат, а затем создать группу для сравнения и объединения, чтобы получить ожидаемый результат

library(tidyverse)
gather(df1, key, val, -ID, -Final, na.rm = TRUE)  %>% 
     group_by(ID) %>%
     summarise(Status = !(all(unique(Final) %in% val) &
                      all(unique(val) %in% Final))) %>% 
     right_join(df1)
# A tibble: 6 x 8
#  ID    Status Final Val1  Val2  Val3  Val4  Val5 
#  <chr> <lgl>  <chr> <chr> <chr> <lgl> <chr> <chr>
#1 P-1   TRUE   A     A     0     NA    0     0    
#2 P-2   TRUE   A     0     A     NA    B     ""   
#3 P-2   TRUE   B     0     A     NA    B     ""   
#4 P-3   FALSE  A     A     B     NA    B     B    
#5 P-3   FALSE  B     A     B     NA    B     B    
#6 P-3   FALSE  B     A     B     NA    B     B    

data

df1 <- structure(list(ID = c("P-1", "P-2", "P-2", "P-3", "P-3", "P-3"
), Final = c("A", "A", "B", "A", "B", "B"), Val1 = c("A", "0", 
"0", "A", "A", "A"), Val2 = c("0", "A", "A", "B", "B", "B"), 
    Val3 = c(NA, NA, NA, NA, NA, NA), Val4 = c("0", "B", "B", 
    "B", "B", "B"), Val5 = c("0", "", "", "B", "B", "B")), .Names = c("ID", 
"Final", "Val1", "Val2", "Val3", "Val4", "Val5"),
   class = "data.frame", row.names = c(NA, 
-6L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...