【问题标题】:Combining many Stata files to one data frame in R将许多Stata文件组合到R中的一个数据框
【发布时间】:2017-10-13 14:57:01
【问题描述】:

我正在尝试将欧洲社会调查中的许多 Stata 文件合并到 R 中的一个数据框中。Stata 文件来自不同年份,并存储在遵循特定逻辑的不同文件夹中 - 'C:\data\ess \2002'、'C:\data\ess\2004' 等等。但是,这些文件没有一致的名称。但它们都有我感兴趣的相同变量。对于每个文件,我想计算各国的加权平均值并通过以下方式添加有关年份的信息:

library(tidyverse)
library(haven)
ess2002 <- read_dta("C:/data/ESS/2002/ESS1e06_4.dta") %>% 
    select(cntry, pspwght, starts_with('ppl') ) %>% 
    group_by(cntry) %>% 
        summarize(ppltrst = weighted.mean(ppltrst, pspwght, na.rm = TRUE),  
                  pplfair = weighted.mean(pplfair, pspwght, na.rm = TRUE), 
                  pplhlp = weighted.mean(pplhlp, pspwght, na.rm = TRUE)) %>% 
    mutate(year = 2002)

然后我想通过附加数据框将所有年份的数据组合成一个数据框,例如ess &lt;- bind_rows(ess2002, ess2004, ...)。这种方法效果很好,但并不那么优雅。我假设我可以将文件名和年份存储在向量中并循环它们或以某种方式使用 purrr,但我还没有弄清楚如何。一个问题是我不想同时在内存中拥有所有完整的Stata数据集,所以我想在读入下一个文件之前从一个文件中选择相关变量。

谁能帮我找到更优雅的解决方案?任何帮助将不胜感激。

【问题讨论】:

  • 抱歉,我应该使用“优雅”这个词来打开那扇门,但我仍然会感谢有关如何使用循环或使用 purrr 找到解决方案的任何建议。

标签: r dataframe purrr


【解决方案1】:

要为此使用purrr,您可以将聚合步骤概括为单个函数:

summarize_dta <- . %>%
    read_dta() %>% 
    select(cntry, pspwght, starts_with('ppl') ) %>% 
    group_by(cntry) %>% 
        summarize(ppltrst = weighted.mean(ppltrst, pspwght, na.rm = TRUE),  
                  pplfair = weighted.mean(pplfair, pspwght, na.rm = TRUE), 
                  pplhlp = weighted.mean(pplhlp, pspwght, na.rm = TRUE)) 

然后创建一个 tibble 或数据框,其中每一列代表年份和相应的 .dta 文件 (file_name)。那么你应该能够做到这一点:

df %>% 
    mutate(data = map(file_name, summarize_dta)) %>%
    unnest()

【讨论】:

  • 我想你的意思是写“purrrr-fectly”
猜你喜欢
  • 1970-01-01
  • 2021-10-18
  • 1970-01-01
  • 2015-03-30
  • 1970-01-01
  • 2012-10-17
  • 2019-06-02
  • 2022-12-06
  • 2016-03-21
相关资源
最近更新 更多