我有一个大型数据框,我尝试在一行中找到重复的元素,然后用空字符串替换所有重复的值:
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]] = "")
有什么想法吗?
答案 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