我下载了一个大型数据集,其中调查参与者(标有家庭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个不完整的变量
答案 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 )
这能满足您的需求吗?