2015-05-21 45 views
7

Mam ramkę danych w R i zastanawiam się, czy możliwe jest pobranie wartości kolumny, która nie jest obecna w innych kolumnach i tym dla każdej kolumny.R: Wyodrębnianie unikalnych wartości w kolumnach ramki danych

My dataframe looks like : 

sample_1 sample_2 sample_3 
    a  a  a  
    c  e  c 
    d  f  e 
    g  m  j 
    m  n  n 
    x  u  w 
    t  z  z 

Chciałbym uzyskać następujący wynik:

sample_1 sample_2 sample_3 
    d  f  j 
    g  u  w 
    x 
    t 

Z góry dziękuję za odpowiedzi,

+0

pamiętać, że w data.frames R ma również taką samą liczbę wierszy we wszystkich kolumnach, dlatego akrun wypełniał drugą i trzecią kolumnę pustymi ciągami (""). Ponieważ chcesz uchwycić trzy wektory o różnej długości, sugerowałbym trzymanie się struktury "list" (wyjścia lapply), która jest bardziej elastyczna, tzn. Jej elementy mogą mieć różne typy i wymiary. –

Odpowiedz

5

Można spróbować

lst <- lapply(seq_along(df1), function(i) df1[,i][!df1[,i] %in% 
         unique(unlist(df1[-i]))]) 
library(stringi) 
as.data.frame(stri_list2matrix(lst, fill='')) 
+5

Lub podobnie: 'lapply (1: ncol (df), funkcja (i) setdiff (df [, i], unlist (df [-i])))' –

+1

Dziękuję za odpowiedzi, działa to idealnie –