2012-11-15 10 views
8

Ich würde gerne lernen, wie man Funktionen auf bestimmte Spalten meines Datenrahmens anwendet, ohne die anderen Spalten von meinem df "auszuschließen". Zum Beispiel möchte ich einige spezifische Spalten mit 1000 multiplizieren und die anderen so belassen wie sie sind.R: Funktion auf bestimmte Spalten anwenden, die den Rest des Datenrahmens erhalten

Mit der sapply Funktion zum Beispiel wie folgt aus:

a<-as.data.frame(sapply(table.xy[,1], function(x){x*1000})) 

ich neue Datenrahmen mit der ersten Spalte mit 1000 multipliziert, aber ohne die anderen Spalten, die ich nicht im Betrieb genutzt haben. Also mein Versuch war es so zu tun:

a<-as.data.frame(sapply(table.xy, function(x) if (colnames=="columnA") {x/1000} else {x})) 

aber dieses hat nicht funktioniert.

Meine Abhilfe bestand darin, beide Datenfelder eine weitere Zeile mit IDs zu geben und später den alten Datenrahmen mit dem neu erstellten zusammenzuführen, um einen vollständigen zu erhalten. Aber ich denke, dass es eine bessere Lösung geben muss. Ist es nicht?

Antwort

6

Wenn Sie nur eine Berechnung auf eine oder wenige Spalten tun möchten, können Sie transform verwenden oder einfach keine Index manuell:

# with transfrom: 
df <- data.frame(A = 1:10, B = 1:10) 
df <- transform(df, A = A*1000) 

# Manually: 
df <- data.frame(A = 1:10, B = 1:10) 
df$A <- df$A * 1000 
+0

ja. das war, was ich suchte. Danke!! – Joschi

+0

Wie mache ich das, wenn ich viele Spalten habe (n = 30)? alle Namen einzugeben wäre zu viel Arbeit ... – Joschi

+2

Sie haben die Nummern? 'df [, c (1,2, ....)] <- 1000 * df [, c (1,2, ....)]' –

0

Der folgende Code wird die gewünschte Funktion auf die nur die Spalten anwenden Sie angeben. Ich werde einen einfachen Datenrahmen als reproduzierbares Beispiel erstellen.

(df <- data.frame(x = 1, y = 1:10, z=11:20)) 
(df <- cbind(df[1], apply(df[2:3],2, function(x){x*1000}))) 

Grundsätzlich verwenden cbind() die Spalten auszuwählen, die Sie laufen auf die Funktion nicht wollen, dann mit den gewünschten Funktionen auf den Zielspalten verwenden apply().

Verwandte Themen