如何将多轮调查合并为一个面板数据(R)



我正在分析一项纵向调查(https://microdata.worldbank.org/index.php/catalog/3712)约有2k个家庭参与(每轮都有所下降(。共有11个波/轮,每个波/轮根据问题的主题分为大约6-8个数据集。为了分析它,我需要它以适当的面板数据格式,每个主题都在一个文件中,组合所有的波浪。

请参阅excel片段(为了简单起见,删除了大多数列(:第1轮与第9轮(分类变量的级别有变化的名称,从全名到只有数字,但这是同一个问题(。基本上,格式看起来像这样:

head(round1.csv)
收入来源1011.业务1。是3。减少1012.养老金2。否1021.业务1。是2。无变化1022。协助1。是3。减少

一次有太多问题,我将忽略权重(在合并解决后,这应该是一个单独的问题(。

如何合并?可以肯定的是,您将执行一项名为左联接的操作。最左边的数据集应该是最长的数据集(第一波(。其他的将由ID连接,并且在下一个连接中丢失的IDs将获得NAs而不是值。我将在这里使用tidyverse代码示例-left_join文档`。

在路上你得处理一些事情。

  • 重复列名
    • 您可以使用类似suffix = c(".wave1", ".wave2")suffix参数
  • 数据的不同编码(如s7q11. YES1(
    • 使用类似extract()的东西来获得相同的表示

完成连接后,需要重新调整数据的形状。这将类似于pivot_longer(),然后是extract(),将.wave#后缀放入一个单独的列中。然后,您可以将pivot_wider()重新转换为更宽的格式,保留您的wave列。

类似R的伪代码,说明了如何做到这一点。。不起作用(因为我没有你的数据集(:

library(tidyverse)
library(readxl)
read_excel("wave1.xlsx") -> d_w1
read_excel("wave2.xlsx") -> d_w2
d_w1 %>%
extract(s7q1, into = "s7q1", regex = "([0-9]+)") %>%
d_w1fix
d_w1fix %>%
left_join(d_w2, by = "ID", suffix = c(".wave1", ".wave2")) %>%
pivot_longer(-ID, names_to = "question", values_to = "answer") %>%
extract(question, into = c("question", "wave"), regex = "([[:alnum:]]+).wave([0-9])") %>%
pivot_wider(names_from = "question", values_from = "answer") ->
d_final

相关内容

  • 没有找到相关文章

最新更新