我在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
我正在尝试通过在整个数据帧中使用唯一功能,但是它不起作用。
答案 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代替了他。一样...