R - 找到行中的所有重复项并替换

时间:2016-12-08 08:14:00

标签: r duplicates apply

我有一个大型数据框,我尝试在一行中找到重复的元素,然后用空字符串替换所有重复的值:

  X1 X2 X3 X4 X5
x  1  2  3  3  4
y  1  1  2  3  4

应该成为

  X1 X2 X3 X4 X5
x  1  2        4
y        2  3  4

我可以在一个载体上执行此操作:

x <- c(1,2,3,3,4)
x[x %in% x[duplicated(x) == TRUE]] = ""
x

[1] "1" "2" ""  ""  "4"

但是我无法让它在数据帧中的所有行上运行。 我已尝试过以下但无法使其发挥作用:

apply(df,2,function(x) x[x %in% x[duplicated(x) == TRUE]] = "")

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

像这样,

找出数据框中重复的索引并用空格替换它们。

df[which(t(apply(df,1,function(x) 
     duplicated(x) | duplicated(x, fromLast = T))), arr.ind = T)] <- ""

df
#   X1 X2 X3 X4 X5
#x  1  2        4
#y        2  3  4

答案 1 :(得分:0)

你可以试试这个:

as.data.frame(t(apply(df, 1, function(x) {x[x==x[duplicated(x)]] <- ''; x})))

获取

   X1 X2 X3 X4 X5
x  1  2        4
y        2  3  4

如果要保留每列的整数类型,请尝试以下操作:

as.data.frame(t(apply(df, 1, function(x) {x[x==x[duplicated(x)]] <- NA; x})))

获取

  X1 X2 X3 X4 X5
x  1  2 NA NA  4
y NA NA  2  3  4