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

Я имею дело с набором данных, который выглядит следующим образом

 id    ColA     ColB
 1     No       Red
 1     Yes      Red
 2     No       Blue
 3     No       Blue
 3     No       Blue
 4     No       Red
 4     Yes      Red

Мне нравится заменять значения в ColA, где

  - ID is duplicate { 1,3,4..}
  - ColB values are the same (id 1, Red,Red) but
  - ColA values are different(id1, yes, no)

Если приведенный выше сценарий верен, то ColA следует заменить на Да.

Окончательный набор данных должен выглядеть следующим образом

  Id    ColA     ColB
  1     Yes      Red 
  1     Yes      Red
  2     No       Blue
  3     No       Blue
  3     No       Blue
  4     Yes      Red
  4     Yes      Red

Любые предложения или указатели очень ценятся.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Вот решение с data.table:

library("data.table")
DT <- fread(
" id    ColA     ColB
 1     No       Red
 1     Yes      Red
 2     No       Blue
 3     No       Blue
 3     No       Blue
 4     No       Red
 4     Yes      Red")
DT[, ColA:=ifelse(uniqueN(ColB)==1 && uniqueN(ColA)==2, "Yes", ColA) , by=id][]
# > DT[, ColA:=ifelse(uniqueN(ColB)==1 && uniqueN(ColA)==2, "Yes", ColA) , by=id][]
#    id ColA ColB
# 1:  1  Yes  Red
# 2:  1  Yes  Red
# 3:  2   No Blue
# 4:  3   No Blue
# 5:  3   No Blue
# 6:  4  Yes  Red
# 7:  4  Yes  Red

вариант без ifelse():

DT[, ColA := if (uniqueN(ColB)==1 && uniqueN(ColA)==2) "Yes", by=id][]
# > DT[, ColA := if (uniqueN(ColB)==1 && uniqueN(ColA)==2) "Yes", by=id][]
#    id ColA ColB
# 1:  1  Yes  Red
# 2:  1  Yes  Red
# 3:  2   No Blue
# 4:  3   No Blue
# 5:  3   No Blue
# 6:  4  Yes  Red
# 7:  4  Yes  Red
0 голосов
/ 26 апреля 2018

Мы можем сделать

library(dplyr)
df1 %>%
   group_by(id, ColB) %>%
   mutate(ColA = if("Yes" %in% ColA) "Yes" else "No")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...