2016-08-10 9 views
0

Использование R. Я новичок. Я попытался найти эту конкретную ошибку/ситуацию и подошел с пустыми руками. Здесь идет:Расчетная колонка, не распознанная в R dcast

Я создал числовой столбец путем вычитания существующего столбца из другого столбца

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

Когда я пытаюсь использоваться dcast на новой колонке делает это:

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

Я получаю это ошибка:

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

Я попытался обратиться к новому столбцу по положению, value.var=MYDATA[61] и когда я делаю это, я получаю сообщение об ошибке, которая начинается с:

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.

Использованием dcast с любым другим столбцом в моих данных работает отлично и делает именно то, что он должен делать.

Извините, я не говорил это раньше. Это то, что мои данные выглядят так:

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 

Я создал новый столбец NETREV (что, очевидно, расходы доходы минус)

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 

Я хочу dcast, чтобы сделать его выглядеть следующим образом:

SCHOOL 2011 2012 2013 

A -2000000 1000000 300000 

B 2000000 1000000 2270000 
+0

Проверьте названия колонок. Что вы получаете от 'имен (MYDATA) [имен (MYDATA)% в% c (" SCHOOL "," YEAR ")]'? –

+2

Просьба представить воспроизводимый пример, включив данные образца. Хорошие ссылки на то, что и как включить здесь: [help/mcve] (http://stackoverflow.com/help/mcve) и [воспроизводимые примеры] (http://stackoverflow.com/questions/5963269/how-to -make-а-большой-R-воспроизводимый-пример). – r2evans

+0

@ Ответ jgadoury решит немедленную функцию, но вы также, вероятно, захотите * не использовать функцию агрегации по умолчанию 'length'. Вместо этого я бы рекомендовал «sum». – Gregor

ответ

1

Если вы хотите получить доступ к столбцам в data.frame, вы должны использовать MYDATA[, i], где i - номер вашей колонки.

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

Нет разницы между этим и кодом OP при назначении нового столбца –

+0

Отлично! Когда я это делал раньше, он все еще создавал столбец NETREV. Но делать это сначала определенно сработало. Спасибо. Все еще изучая это и все особенности. – PML