2016-08-17 6 views
-1

Sah einige relevante Fragen, aber nichts, was mir wirklich gab, was ich brauchte (oder vielleicht habe ich es einfach nicht verstanden).eine Funktion auf eine Teilmenge eines Datenrahmens anwenden

Ich habe eine Daten Fram, die wie folgt aussieht:

Date City A City B City C 
8/17  55  65 75 
8/18  48  85 23 

außer dass es ist viel mehr als 3 Städte. Ich möchte eine Funktion auf jede Spalte im Datenrahmen mit Ausnahme von Datum anwenden - ich könnte die Funktion auf jede Spalte anwenden, und das würde den Trick machen, aber ich suche nach einer Art von Notation, die die Funktion auf alles anwenden wird außer für die Datumsspalte (um DFs mit unterschiedlichen Spaltennamen unterzubringen).

Wurde versucht, anwenden, transformieren, aber kein Glück. Ich sollte erwähnen, dass ich seit ungefähr einem Monat mit R arbeite, also bin ich nicht sehr gut darin (noch!).

Schätzen Sie jede Hilfe, die Sie alle anbieten können, danke im Voraus.

+0

Wahrscheinlich möchten Sie Ihre Daten zuerst in ein langes Format "schmelzen". 'library (reshape2) schmelzen (df, id.vars = 'Datum')' – tcash21

+0

'sapply (df [, - 1], Funktion (i) ...)'? – Sotos

Antwort

1

Sie müssen nur auf df[,-1] gelten:

df=data.frame(Date=c("A","B"), City_A=c(55,48),City_B=c(65,85),City_C=c(75,23)) 
apply(df[,-1],1,sum) 
[1] 195 156 

Und wenn Sie nicht den Index Ihrer Spalte wissen aber nur den Namen, die Sie verwenden können: -(which(colnames(df)=="Date")) statt -1:

apply(df[,-(which(colnames(df)=="Date"))],1,sum) 
[1] 195 156 

Wenn Sie die lapply Version bevorzugen, können Sie

lapply(df[,-(which(colnames(df)=="Date"))],sum) 
012 verwenden

Das wird eine Liste zurückgeben

+1

Wenn es sich um einen 'dat.frame' handelt, ist es sicherer,' lapply' anstelle von 'apply' zu verwenden. –

+0

Ich füge es der Antwort hinzu – Arault

Verwandte Themen