2011-07-26 13 views
18

Próbuję usunąć niektóre zduplikowane wiersze przez jedną kolumnę (np. 1. kolumna) w macierzy w R. jak mogę wyodrębnić unikalny zestaw przez jedną kolumnę z matryca? Użyłem x_1 <- x[unique(x[,1]),], rozmiar jest prawidłowy, ale wszystkie wartości to NA. tak. próbowałem użyć zamiast tego x_1 <- x[-duplicated(x[,1]),]. ale rozmiar nie jest właściwy.Jak usunąć zduplikowane wiersze przez kolumnę w macierzy w R

jakiś pomysł?

Dziękuję bardzo z góry,

Odpowiedz

23

myślę, że jesteś zagubiony jak podzbiorów pracuje w R. unique(x[,1]) zwróci zestaw unikatowych wartości w pierwszej kolumnie. Jeśli następnie spróbujesz użyć podzbioru podzbiór używając tych wartości R myśli, że masz na myśli wierszy macierzy. Najprawdopodobniej otrzymujesz NA, ponieważ wartości odnoszą się do wierszy, które nie istnieją w macierzy.

Twoja druga próba działa wbrew temu, że duplicated zwraca wektor wektorowy, a nie wektor indeksów. Zatem umieszczenie przed nim znaku minus zamienia go na wektor 0 i -1, co ponownie R interpretuje jako próbę odniesienia do wierszy.

Spróbuj zastąpić "-" znakiem "!" przed duplicated, który jest operatorem negacji boolowskiej. Coś takiego:

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

dzięki za szczegółowe odpowiedzi! – verda

+0

to zadziałało dla mnie !!! dzięki! –

13

jak trzeba z indeksami z unikalnych wierszy, użyj duplicated jak próbowałeś. Problem polegał na użyciu - zamiast !, więc spróbuj:

x[!duplicated(x[,1]),] 
+0

dzięki to jest idealne! – verda

Powiązane problemy