在R中数据框的每一行中保持唯一分数

时间:2018-11-08 18:09:29

标签: r dataset

我在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

我只想在整个数据框中的每一行中保留唯一的分数,并用空白或不适用替换重复的分数。像这样:

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 个答案:

答案 0 :(得分:1)

我们可以使用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))

答案 1 :(得分:1)

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

我看到这几乎与@akrun的解决方案相同,只是我用ifelse代替了他。一样...