2016-08-26 4 views
0

Hier schaffen, ist eine Datenmenge aus, die die Anzahl der schwarzen Marmor 2) die Anzahl der weißen Marmor bestehen aus 1) und insgesamt Marmor 3)eine neue Variable durch Schleifen in R

white<- c(5, 6,3,5, 9) 
black<- c(1, 3,7,5,2) 
total<- c(6,9,10,10,11) 
data<- data.frame(white, black, total) 

Wenn ich wollte mache eine Schleife, die zwei neue Variablen prowhite erzeugt, was weiß/total und perblack ist, was schwarz/total ist, was müsste ich tun?

Hier ist, was ich

variables<- list("white","black") 
newnames<- list("perwhite", "perblack") 
for (i in 1:2) { 
    data$newnames[i]<- data[,variables[[i]]]/data$total 
} 

bisher versucht habe, ich glaube, das Problem in der aktuellen Syntax der ist, wenn ich eine neue Spalte im Datensatz zu erstellen versuchen.

Vielen Dank!

+0

'Transformation (Daten, x = weiß/insgesamt, y = schwarz/total)' ist eine Möglichkeit. Um es programmatisch zu machen, yeah, eine Schleife ist in Ordnung oder 'data [, unlist (newnames)] <- lapply (Variablen, Funktion (x) Daten [[x]]/Daten $ total)' - einfach Vektoren nicht verwenden ' list() ', um übrigens Ihre beiden Objekte zu definieren. – Frank

+0

Das eigentliche Problem ist, dass Sie 'x $ y [i] <-' versuchen, was keine gültige Syntax ist. Die rechte Seite von '$' kann nur einen nackten Namen als String enthalten. – Frank

Antwort

1
for(i in setdiff(names(data), "total")) 
    data[paste0("per", i)] <- data[i]/data["total"] 

HINWEIS: Ich gegen die Verwendung von data als Variablenname warnen würde, weil es für eine der integrierten Funktionen ein Name.

Verwandte Themen