2015-02-20 30 views
6

Satır başına benzersiz değerlerin sayısını saymak istiyorum. Bu veri çerçevesi ile Örneğin Satır başına benzersiz değerlerin sayısı sayısı

:

example <- data.frame(var1 = c(2,3,3,2,4,5), 
        var2 = c(2,3,5,4,2,5), 
        var3 = c(3,3,4,3,4,5)) 

I satır başına benzersiz değerlerin sayısını sayan bir sütun eklemek istiyorum; Örneğin. İlk satır için 2 (ilk satırda 2'ler ve 3'ler olduğu gibi) ve ikinci satır için 1 (ikinci satırda yalnızca 3'ler olduğu gibi).

Bunu yapmak için kolay bir kod bilen var mı? Şimdiye kadar sadece sütun başına benzersiz değerlerin sayısını saymak için kod buldum.

+5

işlemleri vasıtasıyla 'örneği < - cbind (örnek, uygulama (örnek, 1, işlev (x) uzunluğu (benzersiz (x)))) – StrikeR

cevap

7

Bu apply fonksiyon her satır benzersiz değerlerin sayısının bir vektör döndürür:

apply(example, 1, function(x)length(unique(x))) 

aşağıdaki iki yöntemden üzerine kullanarak data.frame sonuna ekler (ve isme istiyorsanız count olarak bu sütun):

example <- cbind(example, count = apply(example, 1, function(x)length(unique(x)))) 

veya

example$count <- apply(example, 1, function(x)length(unique(x))) 
-1

Ayrıca regex ile vectorized yaklaşımı kullanabiliriz. paste Veri kümesinin her bir satırının öğelerini (do.call(paste0, ...) belirledikten sonra, herhangi bir karakterin bir desenini eşleştirin, pozitif lookahead'i kullanarak grup olarak yakalayın ((.)), karakterleri yalnızca dizede daha sonra tekrar göründüğünde eşleştirin (\\1 - backreference ve yakalanan grup için. Yani, aslında sadece bu karakterler nchar ile biz dizesindeki karakter sayısını saymak, sonra. o benzersiz olacaktır kalır ("") boş ile değiştirin.

example$count <- nchar(gsub("(.)(?=.*?\\1)", "", do.call(paste0, example), perl = TRUE)) 
example$count 
#[1] 2 1 3 3 2 1 
+0

Neden reddedildiğini bilmiyor musunuz? – akrun