在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

我尝试在整个数据帧中简单地使用唯一函数,但它不起作用。

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))

最新更新