web-dev-qa-db-ja.com

R行列の列によって重複した行を削除する方法

Rマトリックスの1列(最初の列など)で重複した行を削除しようとしています。行列から1列ずつ一意のセットを抽出するにはどうすればよいですか?私は使用しました

x_1 <- x[unique(x[,1]),]

サイズは正しいですが、すべての値はNAです。代わりに、私は試しました

x_1 <- x[-duplicated(x[,1]),]

しかし、寸法は正しくありませんでした。

20
verda

Rでサブセット化がどのように機能するかについて混乱していると思います。unique(x[,1])は最初の列に一意の値のセットを返します。次に、これらの値を使用してsubsetを実行しようとすると、Rはマトリックスのrowsを参照していると見なします。したがって、値がマトリックスに存在しない行を参照しているため、NAが発生する可能性があります。

他の試みは、duplicatedがインデックスのベクトルではなくbooleanベクトルを返すという事実に反しています。したがって、その前にマイナス記号を付けると、0と-1のベクトルに変換されます。これも、Rが行を参照しようとしていると解釈します。

'-'を '!'に置き換えてみてくださいブール否定演算子であるduplicatedの前。このようなもの:

m <- matrix(runif(100),10,10)
m[c(2,5,9),1] <- 1
m[!duplicated(m[,1]),]
27
joran

一意の行のインデックスが必要なため、試したとおりにduplicatedを使用します。問題は、-の代わりに!を使用していたため、次のことを試してください。

x[!duplicated(x[,1]),]
13
daroczig