Сохранять уникальные оценки в каждой строке кадра данных в R

У меня есть следующий кадр данных в R, который имеет дублированные символы в каждой строке.

i01 A   A   A   A   A   A
i02 B   C   D   B   C   D
i03 E   F   E   F   E   F
i04 G   G   G   G   G   G
i05 H   I   J   K   L   M
i06 N   O   P   N   O   P

Я хочу сохранить только уникальную оценку в каждой строке во всем фрейме данных и заменить дублирующиеся баллы либо пробелом, либо NA. Что-то вроде этого:

i01 A   NA  NA  NA  NA  NA
i02 B   C   D   NA  NA  NA
i03 E   F   NA  NA  NA  NA
i04 G   NA  NA  NA  NA  NA
i05 H   I   J   K   L   M
i06 N   O   P   NA  NA  NA

Я пытаюсь просто использовать уникальную функцию во всем фрейме данных, но он не работает.

Всего 2 ответа


as.data.frame(t(apply(df,1,function(x) ifelse(duplicated(x),NA,x))),stringsAsFactors=FALSE)

Я вижу, что это почти идентично решению @ akrun, только я использовал ifelse для его замены. то же самое ...


Мы можем использовать duplicated для назначения NA для этих дубликатов в строке

df1[-1] <- t(apply(df1[-1], 1, function(x) replace(x, duplicated(x), NA)))

данные

df1 <- structure(list(id = c("i01", "i02", "i03", "i04", "i05", "i06"
), v1 = c("A", "B", "E", "G", "H", "N"), v2 = c("A", "C", "F", 
"G", "I", "O"), v3 = c("A", "D", "E", "G", "J", "P"), v4 = c("A", 
 "B", "F", "G", "K", "N"), v5 = c("A", "C", "E", "G", "L", "O"
 ), v6 = c("A", "D", "F", "G", "M", "P")), class = "data.frame", 
 row.names = c(NA, -6L))

Есть идеи?

10000