2016-12-08 6 views
0

を置き換える:R - 行のすべての重複を見つけ、私は大規模なデータフレームを持ち、行の重複要素を検索し、空の文字列で、すべての重複値を置換しようとしています

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" 

しかし、私はWORにこれを取得することができませんkをデータフレーム内のすべての行に適用します。 私は次のことを試してみたが、それは仕事を得ることができませんでした:

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

任意のアイデア?

+2

数値データセットがあり、値を '' "'で置き換えると、データセット全体が文字になります。本当にそれが欲しいですか?これ以上算術演算を行うことはできません。また、私はあなたのところで行列を使って作業することも考えています。 –

+0

Davidに感謝します。はい、私はすべての値の文字を最終的に作りたいと思います。私は行列の使い方についてあなたの提案を調べます。ありがとうございました。 – duraq

+0

私は、この問題のためにdupeのgazzillionsがあると思います。可能な複製のhttp://stackoverflow.com/questions/37306011/replace-duplicated-elements-with-na-instead-of-removing-them – akrun

答えて

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 
+0

スーパー、ありがとう!これは私のために働いた。 – duraq

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

うまく働いた - ありがとう! – duraq

関連する問題