2015-02-20 8 views
6

Ich möchte die Anzahl der eindeutigen Werte pro Zeile zählen.Anzahl der eindeutigen Werte pro Zeile zählen

Zum Beispiel mit diesem Datenrahmen:

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)) 

Ich möchte eine Spalte hinzuzufügen, die die Anzahl der eindeutigen Werte pro Zeile zählt; z.B. 2 für die erste Reihe (da es 2 und 3 sind in der ersten Reihe) und 1 für die zweite Reihe (da es nur 3 in der zweiten Reihe gibt).

Kennt jemand einen einfachen Code, um dies zu tun? Bisher habe ich nur Code zum Zählen der Anzahl der eindeutigen Werte pro Spalte gefunden.

+5

ues 'Beispiel zählen < - cbind (Beispiel, apply (Beispiel, 1, Funktion (x) Länge (eindeutig (x)))) ' – StrikeR

Antwort

7

Diese apply Funktion gibt einen Vektor der Anzahl der eindeutigen Werte in jeder Zeile:

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

Sie können es auf Ihre data.frame anhängen auf der folgenden zwei Möglichkeiten, mit (und wenn Sie benennen möchten daß Spalte als count):

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

oder

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

Wir können auch einen vektorisierten Ansatz mit regex verwenden. Nach paste In den Elementen jeder Zeile des Datasets (do.call(paste0, ...) ein Muster eines beliebigen Zeichens abgleichen, als Gruppe erfassen ((.)). Mit dem positiven Lookahead müssen Zeichen nur dann übereinstimmen, wenn sie später wieder in der Zeichenkette erscheint (\\1 - backreference für die erfassten Gruppe und ersetzen sie es mit leeren (""). in der Tat also nur die Zeichen bleiben, dass einzigartig sein wird. Dann mit nchar wir die Anzahl der Zeichen in der Zeichenkette.

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

Ich weiß nicht, warum es downvoted ist. – akrun