2017-10-04 4 views
1

gefunden habe ich diesen Datenrahmen als Spielzeug Beispielfinden einzigartige Kombination von Vars und eine neue var erstellen, wenn eine einzigartige Kombination

aski = data.frame(A = c("x","y","z","x","z","z"), 
        B = c("a","b","c","a","b","c")) 

i für jede einzelne Kombination von A und B prüfen Jetzt will und wenn sie einen einzigartigen combo Ich möchte eine neue Variable im Datenframe erstellen und jedes mal (z. B. r1, r2, ....) eine eindeutige Kombination inkrementieren.

Ausgangsdatenrahmen so etwas wie diese

aski2 = data.frame(A = c("x","y","z","x","z","z"), 
        B = c("a","b","c","a","b","c"), 
        output = c("r1","r2","r3","r1","r4","r3")) 

Antwort

3

Try this:

aski2 <- data.frame(A = c("x","y","z","x","z","z"), 
        B = c("a","b","c","a","b","c")) 
ref <- do.call(paste, aski2) 
aski2$output <- paste("r", as.numeric(factor(ref, levels = unique(ref))), 
         sep = "") 
aski2 
+0

aber wenn haben andere Variablen im Datenrahmen "aski2" anders als "A" und "B". Angenommen, wenn der Datenrahmen dies ist>> aski2 <- data.frame (A = c ("x", "y", "z", "x" , "z", "z"), + B = c ("a", "b", "c", "a", "b", "c"), C = c ("s", " v "," g "," v "," g "," d "))." Wie geht man dann vor? – SumitArya

+0

ich möchte nach einzigartigen Combo nur A und B suchen. Bitte beantworten Sie dies. Ich markiere Ihren Kommentar als Antwort dann – SumitArya

+0

In diesem Fall müssen Sie nur das 'ref' Objekt nur mit den Spalten' A' und 'B berechnen '. Dies sollte funktionieren 'ref <- do.call (einfügen, aski2 [, c (" A "," B ")]) – ANG

1

Eine weitere Option ist group_indices verwenden; Gruppe durch Spalte A und B, und es erzeugt eine eindeutige ID für jede Gruppe (siehe group_indices?):

aski2 <- data.frame(A = c("x","y","z","x","z","z"), 
        B = c("a","b","c","a","b","c"), 
        C = c("s","v","g","v","g","d")) 

aski2 %>% mutate(output = sprintf("r%s", group_indices(., A, B))) 

# A B C output 
#1 x a s  r1 
#2 y b v  r2 
#3 z c g  r4 
#4 x a v  r1 
#5 z b g  r3 
#6 z c d  r4 
0

Eine Option ist .GRP

library(data.table) 
setDT(aski2)[, output := paste0("r", .GRP), .(A, B)] 
Verwandte Themen