2017-03-10 8 views
-1

Das Problem, das ich versuche zu lösen, ist wie folgt: Ich habe einen Datenrahmen, sagen c und es hat einen Spaltennamen namens "WasteType". Nun enthält "WasteType" mehrere Faktorwerte (T, U, V usw.) und diese Liste kann mit verschiedenen Datensätzen variieren. Ich würde neue Spalten T, U usw. basierend auf den verschiedenen Faktorwerten erstellen wollen, und es wird dynamisch sein. Hier ist die Funktion, die ich erstellt habe. Wäre hilfreich, wenn ich dazu eine Anleitung und Anleitung bekomme.Hinzufügen von dynamischen neuen Spalten

Um zu beginnen und zu sehen, ob meine Funktion funktioniert. Ich habe die ersten vier Zeilen aus dem Datenframe genommen und der WasteType enthält nur "T" und "U". Also, ich möchte eine Spalte T hinzufügen, die 1 zeigt, wenn WastType-Spalte 1 und 0 andernfalls hat. Ähnliches gilt für Spalte U.

d<-function(c,x=c$WasteType){ 
    x1<-unique(x) 
    print (x1) 
    s<-length(x1) 
    n<-ncol(c) 
    print(s) 
    for(i in 1:s){ 
     print(x1[i]) 
     mutate(c,ifelse(x==c(x1[i]),1,0)) ##adding a new column 
     colnames(c)[n+1]<-x1[i]   ##renaming the column 
     return(c) 
    } 
} 
d(c,x=c$WasteType) 

ich kann nicht herausfinden, warum die obige Funktion nicht in der Lage ist, die mutieren() Funktion zu lesen.

Ich bin noch in einem sehr im Entstehen begriffenen Stadium, wenn es um das Programmieren in R geht. Obwohl ich mehrere Fragen durchging, bevor ich es hier postete. Das Problem mag albern aussehen, aber ich kann es noch nicht lösen.

Antwort

0

Wenn Sie eine Lösung, ohne eine Funktion sapply unter Verwendung von Schreib:

c <- data.frame(WasteType = c('T', 'U', 'T', 'U'), stringsAsFactors = FALSE) 
    d <- t(sapply(c$WasteType,function(x) as.numeric(unique(c$WasteType) %in% x))) 
    colnames(d) <- unique(c$WasteType) 
> cbind(c,d) 
    WasteType T U 
1   T 1 0 
2   U 0 1 
3   T 1 0 
4   U 0 1 

(eine Warnung erhalten, dass für das Objekt d row.names wird nicht verwendet, da es Duplikate gibt, was in Ordnung ist und ignoriert werden kann)

0

ich gezwickt Ihre Funktion ein wenig:

c <- data.frame(WasteType = c('T', 'U', 'T', 'U'), stringsAsFactors = FALSE) 

d <-function(c, x = c$WasteType) { 
    x <- c$WasteType 
    x1 <- unique(x) 
    s <-length(x1) 
    n <- ncol(c) 

    for(i in seq_len(s)) { 
     c <- mutate(c, ifelse(x == x1[i], 1, 0)) 
     colnames(c)[n + i] <- x1[i] 
    } 

    return(c) 
} 

d(c, x = c$WasteType) 

    WasteType T U 
1   T 1 0 
2   U 0 1 
3   T 1 0 
4   U 0 1 
Verwandte Themen