如何在R中使用指定的偏好数据从长到宽

问题描述 投票:0回答:1

我希望这不是交叉发布。我一直试图从stackoverflow上的可用链接中了解如何对数据进行从长到宽的更改。我想我快到了,但仍然有很多失踪。

enter image description here

我已经说明了在电动和汽油汽车之间进行选择的偏好数据。一些变量通常与汽车有关,例如PREZZO,而另一些变量与电动汽车有关,例如AUTONOMIA_EV,而其他变量与内燃机汽车有关,例如AUTONOMIA ICEV。

每个受访者在INTERTOT栏中均用数字标识。第一响应者的号码为111。该个人有20行,因为他在两辆汽车,一辆电动汽车和一辆汽油中面临10种选择。在SCELTAEFF2列中,等于1的值表示个人进行的选择。必须将此值与对应的列EV中所报告的值进行比较,其中值1表示该行中的选项是电动汽车。

因此,例如,如果您查看第4行,该行涉及第一个人面临的第二个选择,则列SCELTAEFF2的值为1,列EV上的对应行也为1。这就是说,对于第二个提议的替代方案,受访者选择了电动汽车。如果您感兴趣地看第8行,涉及第四个选择,则个人选择汽油车。之所以如此,是因为列SCELTAEFF2的值为1,但列EV上的对应行为零。

[现在,我希望每个受访者只有INTERTOT,只有一行,包含现在分布在20行中的所有信息。

我拥有的文件很大,所以我只向您显示一部分。

我想估计一种混合选择模型,并通过delta方法进行支付意愿的计算,但第一个问题与数据格式正确有关。

我正在尝试的代码如下:prova_reshape.wide = reshape(data = "prova_reshape", idvar = "INTERTOT", direction = "wide" )

但是,当然,我收到以下错误消息:Error in data[, timevar] : numero di dimensioni errato

因为我没有指定timevar。好吧,我没有,因为我不知道要放什么。此外,我不确定指定idvar = "INTERTOT"是否足够。

我查看了网络上的其他来源,例如:

enter link description here

和此

enter link description here

我想我可能会接近,但是我不确定该如何进行。

如果有人可以帮助我,我将非常有帮助。

马可

r reshape preferences
1个回答
0
投票

亲爱的罗纳克·沙(Ronak Shah),非常感谢您的帮助。我试过dput(head(prova_reshape,20))

结果为以下

structure(list(QI = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), CSET = c(10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L), INTERTOT = c(111L, 111L, 111L, 111L, 111L, 111L, 111L, 111L, 111L, 111L, 111L, 111L, 111L, 111L, 111L, 111L, 111L, 111L, 111L, 111L), NSCELTA = c(1L, 1L, 2L, 2L, 3L, 3L, 4L, 4L, 5L, 5L, 6L, 6L, 7L, 7L, 8L, 8L, 9L, 9L, 10L, 10L), SCELTAEFF2 = c(0L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 0L), MARCA = c(4L, 1L, 1L, 2L, 1L, 4L, 4L, 2L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 2L, 4L, 3L, 1L), EV = c(1L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 0L ), PREZZO = c(25000L, 30000L, 25000L, 20000L, 30000L, 25000L, 20000L, 15000L, 25000L, 15000L, 30000L, 20000L, 20000L, 25000L, 35000L, 30000L, 20000L, 15000L, 35000L, 20000L), AUTONOMIA = c(150L, 1200L, 150L, 800L, 150L, 400L, 350L, 400L, 250L, 400L, 350L, 1200L, 150L, 800L, 350L, 800L, 250L, 1200L, 250L, 400L), AUTONOMIA_EV = c(150L, 0L, 150L, 0L, 150L, 0L, 350L, 0L, 250L, 0L, 350L, 0L, 150L, 0L, 350L, 0L, 250L, 0L, 250L, 0L), AUTONOMIA_ICEV = c(0L, 1200L, 0L, 800L, 0L, 400L, 0L, 400L, 0L, 400L, 0L, 1200L, 0L, 800L, 0L, 800L, 0L, 1200L, 0L, 400L)), row.names = c(NA, 20L), class = "data.frame")

我希望这有助于示例的可复制性。

非常感谢您的帮助,因为我一开始就坚持这一过程。

马可

© www.soinside.com 2019 - 2024. All rights reserved.