【问题标题】:Creating variables by conditional command in R在 R 中通过条件命令创建变量
【发布时间】:2016-06-30 11:39:26
【问题描述】:

我有一个纵向数据集,其中人们在不同年份 40 岁,我需要对 40 岁的人进行分析(倾向得分匹配)。我想创建一个收入变量,将 Income 1992 用于 1998 年年满 40 岁的人,将 Income 1994 用于 2000 年年满 40 岁的人,依此类推。

我的数据看起来像这样(我希望 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     | 

我对他们 40 岁前 6 年的收入感兴趣。我已经根据某一年的购买力调整了所有收入变量。我试过这个:

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

我得到了所有的 NAs

我也试过这个:

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

我收到以下错误

if (SourceYear== "1998") { 中的错误:参数长度为零

如果有人能提供帮助,那将是非常有帮助的,我将不胜感激。

【问题讨论】:

  • 您需要展示一个可重现的示例。此外,Incomenew 的长度仅为 1,而 SourceYear 的长度可能不同。试试Incomenew &lt;- rep(NA, length(SourceYear))
  • 除非SourceYear 被保存为对子集有用的对象(没有数据我无法判断),它可能需要以数据集为前缀:Income1992[Income1992$SourceYear == 1998,]。请注意,您还需要在其后放置一个逗号以指定您要对年份进行子集化,并需要所有列,并确定您的年份是字符串 ("1998") 还是数字 (2000)。
  • @akrun 非常感谢您的回答,在尝试创建可重现的示例时,我发现此命令有效;但在我的原始数据中,一开始并没有。然后我意识到这是因为我在 SourceYear 中有一些 NA。当我省略这些时,它起作用了。谢谢!
  • @alistaire 谢谢。数据集非常大,所以我不知道如何显示它。

标签: r if-statement conditional panel-data recode


【解决方案1】:

在我的原始数据集中,我有一些 SourceYear 的 NA。我没有意识到这对这个命令很重要。 如果使用 SourceYear 中没有 NA 的子集,则第一个命令实际上有效。一个例子是:

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"]

【讨论】:

    猜你喜欢
    • 2020-03-13
    • 2015-10-03
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多