Создание переменных условной командой в R

У меня есть продольный набор данных, в котором людям исполняется 40 лет в разные годы, и мне нужно провести анализ (сопоставление показателей склонности) с 40-летними. Я хочу создать переменную дохода, которая будет использовать Income 1992 для людей, которым исполнится сорок в 1998 году, использует Income 1994 для людей, которым исполнится сорок в 2000 году, и так далее.

Мои данные выглядят так (и я хочу, чтобы Incomenew выглядел так):

  ID | SourceYear| Income1992| Income1994 | Incomenew |
|---------------|------------|------------|           |
| 1  | 1998     |  10000     | 12000      | 10000     |
| 2  | 2000     |  20000     | 15000      | 15000     |
| 3  | 1998     |  17000     | 16000      | 17000     |
| 4  | 2000     |  18000     | 20000      | 20000     | 

Меня интересует их доход за 6 лет до того, как им исполнится 40. Я уже скорректировал все переменные дохода на покупательную способность определенного года. Я попробовал это:

Incomenew<-NA
Incomenew[SourceYear=="1998"]<-Income1992[SourceYear=="1998"]
Incomenew[SourceYear=="2000"]<-Income1994[SourceYear=="2000"]

Я получаю все NA

Я также пробовал это:

`Incomenew<-if (SourceYear=="1998")] {Income1992}
                   else if (SourceYear==2000) 
                 {Income1994}`

Я получаю следующую ошибку

Ошибка в if (SourceYear== "1998") { : аргумент имеет нулевую длину

Было бы очень полезно, если бы кто-то мог помочь с этим, я был бы очень признателен.


person Aslı Gürer    schedule 15.03.2016    source источник
comment
Вам нужно показать воспроизводимый пример. Кроме того, Incomenew имеет только длину 1, тогда как SourceYear может иметь другую длину. Попробуйте Incomenew <- rep(NA, length(SourceYear))   -  person akrun    schedule 15.03.2016
comment
Если SourceYear не сохранен как объект, полезный для подмножества вещей (я не могу сказать без данных), он, вероятно, должен иметь префикс набора данных: Income1992[Income1992$SourceYear == 1998,]. Обратите внимание, что вам также нужно поставить запятую после нее, чтобы указать, что вы подмножаете годы и хотите, чтобы все столбцы и выясняли, являются ли ваши годы строками ("1998") или числами (2000).   -  person alistaire    schedule 15.03.2016
comment
@akrun Большое спасибо за ваш ответ, пытаясь создать воспроизводимый пример, я обнаружил, что эта команда работает; но в моих исходных данных этого не было сначала. Затем я понял, что это потому, что у меня есть несколько NA в SourceYear. Когда я опустил их, это сработало. Благодарю вас!   -  person Aslı Gürer    schedule 26.03.2016
comment
@alistaire Спасибо. Набор данных был довольно большим, поэтому я не знал, как его показать.   -  person Aslı Gürer    schedule 26.03.2016


Ответы (1)


В моем исходном наборе данных у меня было несколько NA для SourceYear. Я не понимал, что это важно для этой команды. Первая команда действительно работает, если используется подмножество без NA в SourceYear. Пример:

ID<-c(1,2,3,4,5,6)
SourceYear<-c("1998", "2000", "1998","2002","2000", "2002", NA)
Income92<-c(100000,120000,170000,180000, 190000, NA)
Income94<-c(120000,150000,160000,20000,NA, 120000)
Income96<-c(130000, 110000,NA, 180000, 190000, 180000)
incomedata<-data.frame(ID, SourceYear,Income92, Income94, Income96, Incomenew)
summary(incomedata)
incomedata1<-subset(incomedata, !is.na(incomedata$SourceYear))
incomedata1$Incomenew<-rep(NA, length(incomedata1$SourceYear))
incomedata1$Incomenew[incomedata1$SourceYear=="1998"]<-
incomedata1$Income92[incomedata1$SourceYear=="1998"]
incomedata1$Incomenew[incomedata1$SourceYear=="2000"]<-
incomedata1$Income94[incomedata1$SourceYear=="2000"]
incomedata1$Incomenew[incomedata1$SourceYear=="2002"]<- 
incomedata1$Income96[SourceYear=="2002"]
person Aslı Gürer    schedule 26.03.2016