2016-08-10 3 views
0

Verwenden von R. Ich bin ein Neuling. Ich habe versucht, nach diesem speziellen Fehler/dieser Situation zu suchen und kam mit leeren Händen auf. Hier geht:Berechnete Spalte wird nicht in R angezeigt dcast

ich eine numerische Spalte erstellt durch eine vorhandene Spalte aus einer anderen Spalte subtrahiert

MYDATA$NETREV <- (MYDATA[60] - MYDATA[51]) 

Wenn ich versuche, auf die neue Spalte verwendet dcast dies zu tun:

NETREV.TREND <- dcast(MYDATA, SCHOOL ~ YEAR, value.var="NETREV") 

ich das bekommen Fehler:

Error in `[.data.frame`(value, overall) : undefined columns selected 

Ich habe versucht, auf die neue Spalte nach Position,beziehen undwenn ich das tue, ich erhalte eine Fehlermeldung, die mit Beginn des Einsatzes:

Error: value.var (list(OPREVADJ = c(-9280446, -14437883, -12637590, -14365373, -17149995, -13960077, -11458410, -3701678, -861092, -10071075, 23965, -5324362, -5974479, 14275488, -6118691, -7801750, -7838486, -14343695, NA, -17785841, -14357459, -14787673, -480654 ... etc.

Mit dcast mit einer anderen Spalte in meine Daten funktioniert gut und genau das tut, was es tun soll.

Tut mir leid, ich habe das nicht früher geschrieben. Dies ist, was meine Daten wie folgt aussehen:

SCHOOL YEAR REVENUE EXPENSES 

A 2011 10000000 12000000 

A 2012 15000000 14000000 

A 2013 16000000 15700000 

B 2011 8000000 6000000 

B 2012 7500000 6500000 

B 2013 7770000 5500000 

habe ich die neue Spalte NETREV (was natürlich Kosten Einnahmen minus ist)

SCHOOL YEAR REVENUE EXPENSES NETREV 

A 2011 10000000 12000000 -2000000 

A 2012 15000000 14000000 1000000 

A 2013 16000000 15700000 300000 

B 2011 8000000 6000000 2000000 

B 2012 7500000 6500000 1000000 

B 2013 7770000 5500000 2270000 

ich die dcast wollen es wie unten aussehen:

SCHOOL 2011 2012 2013 

A -2000000 1000000 300000 

B 2000000 1000000 2270000 
+0

Überprüfen Sie die Spaltennamen. Was bekommst du von 'Namen (MYDATA) [Namen (MYDATA)% in% c (" SCHULE "," JAHR ")]? –

+2

Bitte geben Sie ein reproduzierbares Beispiel an, indem Sie Beispieldaten einschließen. Gute Referenzen für das, was und wie man es einbinden kann, sind hier: [help/mcve] (http://stackoverflow.com/help/mcve) und [reproduzierbare Beispiele] (http://stackoverflow.com/questions/5963269/how-to -make-a-great-r-reproduzierbar-Beispiel). – r2evans

+0

@ jgadourys Antwort wird die sofortige Funktion lösen, aber Sie werden wahrscheinlich auch nicht die Standard-Aggregationsfunktion "length" verwenden wollen. Ich würde stattdessen 'sum' empfehlen. – Gregor

Antwort

1

Wenn Sie auf Spalten in einer data.frame zugreifen möchten, sollten Sie MYDATA[, i] verwenden, wobei i Ihre Spaltennummer ist.

MYDATA$NETREV <- (MYDATA[, 60] - MYDATA[, 51]) 
+0

Es gibt keinen Unterschied zwischen diesem und OP-Code beim Zuweisen einer neuen Spalte –

+0

Großartig! Als ich es vorher gemacht habe, hat es immer noch die NETREV-Spalte erstellt. Aber das erste zu tun hat definitiv funktioniert. Vielen Dank. Ich lerne immer noch diese und alle Eigenheiten. – PML