2017-11-27 2 views
1

Betrachten Sie den folgenden Datenrahmen:Erstellen Sie neue Spalt basierend auf Vorkommen von mindestens einer Variablen in anderer Spalte Gruppe

ID <- c(1,1,1,2,2,3,3,3,3) 
A <- c("No","No","Yes","Yes","Yes","No","No","No","No") 
B <- c("Yes","Yes","Yes","Yes","Yes","No","No","No","No") 
df <- data.frame(ID,A,B) 

Ich mag Spalte B schaffen, in dem das Auftreten von mindestens einem „Ja“ Spalte A führt nur zu "Ja" -Werten in Spalte B für jede separate ID. Ich habe die beiden folgenden Ansätze ausprobiert (ich glaube, ich fast da bin):

library(dplyr) 
df <- df %>% 
    group_by(ID) %>% 
    mutate(B1=ifelse(A == "Yes", "Yes", "No")) # B1 is the new column for comparison 

leider die gleiche Spalte als Nachricht

und

df2 <- transform(df, B1= ave(A, ID, FUN=function(x) x[A == "Yes"])) 

ergibt einen Fehler gibt:

1: In x [...] < - m: Anzahl der zu ersetzenden Elemente ist kein Vielfaches der Ersatzlänge

Hilfe wäre sehr willkommen.

+1

Können Sie mir ein Beispiel Ihrer gewünschten Ausgabe zeigen? –

+0

Spalte B ist meine gewünschte Ausgabe – ykl

Antwort

4

Sie hatten es fast. Hier ist eine kleine Bearbeitung Ihrer Pfeife. Wolltest du das?

df <- df %>% 
group_by(ID) %>% 
mutate(B1=ifelse("Yes" %in% A, "Yes", "No")) 
df 
+1

Dies ist eine gute Antwort +1. Beachten Sie, dass sie technisch gesehen nicht einmal "ifelse" brauchen, sondern nur "if ... else", weil sie nur wissen müssen, ob Yes überhaupt vorhanden ist oder nicht. Es könnte also auch 'mutate 'sein (B1 = if (any (A ==" Yes "))" Yes "sonst" No ")' –

+0

Danke für die Antwort und danke für die weitere Spezifikation! – ykl

Verwandte Themen