R:将3个变量合并为1个变量

时间:2016-04-29 02:58:43

标签: r variables

我下载了一个大型数据集,其中调查参与者(标有家庭ID)被要求提供相同的信息,但被问为“问题1”,“问题2”或“问题3”。数据集以3个不同的变量给出它们的结果。

以下是我的三个变量: pctstocks_1 pctstocks_2 pctstocks_3

调查参与者随机出现在所有三个变量中,就像家庭id为1-1000的人在第一个变量中一样;家庭ID 1001-2000在第二个变量等等。他们都混在一起,有一些调查参与者根本没有被问到这个问题。

我只想把它们全部变成一个变量,比如“pctstocks”,所以我可以用pctstocks作为依赖(“Y”)变量进行回归

我已经看到很多关于合并来创建新数据框的事情。我不认为我需要/需要一个全新的数据框,我只想创建一个新变量并将其添加到数据框中。

感谢您的帮助! 编辑: 很抱歉在原帖中不够清楚,我想如果我提出这个问题的时间太长,没人会想读它。 这是我正在使用的较大数据集的子集

> regdata <- data.frame(HHID, Risk_Pct, pctstocks_1, pctstocks_2, pctstocks_3, Stocks_Pct, age, gender, Own_Home, Marital_Status, current_job_status,Total_Wealth,stock_market_expectations )

我应该澄清一下,pctstocks_1,pctstocks_2和pctstocks_3实际上并不是整数,尽管它们听起来像是这样。参与者最初给出了一个数字答案,但随后将其分为四类:“低”,“有些”,“高”或“实质”

根据要求,这是head()函数: head() function output

当我尝试使用tidyr的“unite”函数时,它没有用,因为我将变量分成类别,因此它们有标签而不再是整数 (给出确切的错误消息:错误:所有select()输入必须解析为整数列位置。)

当我用ifelse尝试rosscova的方法时发生了这种情况:

> regdata$group <- ifelse( !is.na( pctstocks_1 ), 1L, ifelse(  !is.na( pctstocks_2 ), 2L, ifelse( !is.na( pctstocks_3 ), 3L, NA ) ) )
> 
> regdata$group<-max(c(pctstocks_1, pctstocks_2, pctstocks_3), na.rm = TRUE)
> describe(regdata$group)
regdata$group 
      n missing  unique    Info    Mean 
  16000       0       1       0     999 
> summary(regdata$group)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    999     999     999     999     999     999 

所以我认为出了问题,这只适用于整数吗?

第二次编辑: Kunal Puri:3个pctstocks变量中的每个变量基本上是相同的问题,但由于它被问为第一个,第二个或第三个问题,每个参与者的反应只被放入3个变量中的一个。因此,每个参与者仅出现在其中一个变量中,并且对其他两个变量具有NA响应。我想这样做,以便有一个变量记录所有参与者的响应,而不是有3个不完整的变量

1 个答案:

答案 0 :(得分:0)

您真的想要2个新变量,一个用于组号,一个用于响应。您可以先创建组变量(我假设空单元格为NA):

table$group <- ifelse( !is.na( table$pcstocks_1 ), 1L, ifelse(  !is.na( table$pcstocks_2 ), 2L, ifelse( !is.na( table$pcstocks_3 ), 3L, NA ) ) )

然后将响应值移动到您的单个&#34; Y&#34;柱。有几种方法可以做到这一点,其中最好的方法取决于您的数据。我认为max应该非常强大:

table$response <- max( c( table$pcstocks_1, table$pcstocks_2, table$pcstocks_3 ), na.rm = TRUE )

这能满足您的需求吗?