У меня есть дубликаты идентификаторов из-за значений в другом столбце - PullRequest
1 голос
/ 19 января 2020

Идентификаторы дублируются из-за нескольких типов в другом столбце. Я хотел бы удалить дубликаты идентификаторов и иметь вместо них столбец индикатора для указанных типов c. Будем рады видеть решение в R и SAS, если это возможно. Вот что мне нужно и нужно:

have<-data.frame(id=c(1,1,2,3,3,3,4,5,5,6))
have$type<-c("healthy","healthy","injury1","healthy","injury2",
         "injury1","healthy","injury2","healthy","injury2")

need<-data.frame(id=c(1,2,3,4,5,6))
need$injury_ind<-c(0,1,1,0,1,1)

1 Ответ

1 голос
/ 19 января 2020

В R мы можем использовать str_detect (или grepl) для обнаружения «травмы» в «типе» после группировки по «id»

library(dplyr)
library(stringr)
have %>%
   group_by(id) %>% 
   summarise(injury_id = +(any(str_detect(type, 'injury'))))
# A tibble: 6 x 2
#     id injury_id
#  <dbl>     <int>
#1     1         0
#2     2         1
#3     3         1
#4     4         0
#5     5         1
#6     6         1

Мы можем сделать регулярное выражение немного больше специфика c, если '^injury\\d+$' соответствует строке «травма» в начале (^) строки, за которой следуют одна или несколько цифр (\\d+) в конце ($) из строка


Или с aggregate из base R

aggregate(cbind(injury_ind = type) ~ id, have,
         FUN = function(x) +(any(grepl('injury', x))))

Или без группировки, мы можем использовать grepl, чтобы найти «идентификаторы с« травмой » введите и проверьте, какие из идентификаторов unique включены

un1 <- unique(have$id)
data.frame(id = un1, injury_id = +(un1 %in% 
              unique(have$id[grepl('injury', have$type)])))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...