2016-06-21 16 views
2

Ich brauche eine neue Variable Ergebnis in R, so dass genannt zu tun erzeugen:generieren neue Variable in R basierend auf Gruppeneigenschaften

basierend auf Variable.ID wenn alle Klassifizierung pro Variable.ID gleich „ja “Ergebnis = "yes" und wenn alle Klassifizierung pro Variable.ID gleich "nein" lautet, Ergebnis = "no" sonst Ergebnis = "unbestimmt"

enter image description here

Kann jemand mir sagen, Wie kann ich das machen? (Es gibt Hunderte von Variable.IDs, also bitte keine manuelle Vektorzuweisungen.)

+2

Hier geht es darum, wie man etwas in R macht und daher hier nicht zum Thema gehört. Sie sollten diese Frage stattdessen auf stackoverflow stellen. –

Antwort

3

Dies kann mit ave(), any(), all() usw. getan werden. Aber die Frage ist nicht gut für Kreuz validiert . Das Folgende ist ein Starter für Sie. Sie werden „NA“ auf „undeterminded“ ändern müssen, aber ich versuchte, den Code so einfach zu begreifen wie möglich zu halten:

d <- data.frame(v.id=c(1,1,1,2,2,2,3,3,3), 
      clas=c("yes", "yes", "yes", "yes", "yes", 
        "no","no","no", "no")) 

d$result <- ave(d$clas, d$v.id, 
      FUN=function(x) { 
       if(all(x=="yes")){ return("yes") } 
       if(all(x=="no")) { return("no") } 
       else return(NA) 
      }) 
3

Sie Classification von Variable.ID aufspalten und prüfen, ob alle Werte entweder yes oder no zu sein:

library(plyr) 
results <- llply(split(d, d$Variable.ID), function(d2) { 
if(all(d2$Classification=='yes')) { 
    'yes' 
} else if(all(d2$Classification=='no')) { 
    'no' 
} else { 
    'undetermined' 
} 
}) 
d$Results <- factor(unlist(results[d$Variable.ID])) 

... das sollten Sie geben, was Sie gefragt:

> print(d) 

    Variable.ID Classification  Results 
1   1   yes   yes 
2   1   yes   yes 
3   1   yes   yes 
4   1   yes   yes 
5   1   yes   yes 
6   2    no   no 
7   2    no   no 
8   2    no   no 
9   2    no   no 
10   3   yes undetermined 
11   3    no undetermined 
12   4   both undetermined 
13   4   <NA> undetermined 
14   4   yes undetermined 
0
foo <- function(x) { 
    if (sum(x == "yes") == length(x)) { 
    return("yes") 
    } else if (sum(x == "no") == length(x)) { 
    return("no") 
    } else { 
    return("undetermined") 
    } 
} 

for (i in seq_along(data) { 
    data$Result[i] <- foo(data$Classification[data$Variable.ID == data$Variable.ID[i]) 
} 
Verwandte Themen