【问题标题】:How to expand data from a big survey in R如何在 R 中扩展大型调查的数据
【发布时间】:2020-05-23 03:09:36
【问题描述】:

我有一个包含这些变量的调查数据:

df <- data.frame(Sex = c("Male","Female","Male","Female","Male"),
                 Age = c(19,20,34,56,45),
                 ExpansionFactor = c(123456789,31256789,127896543,251436978,536294817))

我想创建一个报告,但首先我需要扩展数据调查而不会使我的电脑崩溃。

我想要的数据集:

Sex       Age
Male      19
.         .
.         .
.         .
Female    20
.         .
.         .
.         .
Male      34
.         .
.         .
.         . 
Female    56
.         .
.         .
.         .
Male      45
.         .
.         .
.         .
Male      45

dim(df)
[1] 1070341916 2 

有什么建议吗?

非常感谢您的帮助。

【问题讨论】:

  • 您肯定需要 10 亿条原始记录吗?一旦数据扩展,您打算如何处理数据?例如,可以在不扩展的情况下对汇总数据进行建模。
  • 非常感谢您的回答。好吧,这是一个例子,但我想创建一个报告。使用我的真实数据,我需要扩展到人口,这个人口大约是 3500 万人。我会很感激任何建议。
  • 你可以试试tidyr::uncount(df, ExpansionFactor)或者stackoverflow.com/questions/2894775/…中提到的其他方法
  • 我还想知道您是否必须扩展数据(而不是逐行解析文件中的相关信息)(但是对于 N=3.5E7 和 32GB+ 的 RAM,它应该可以工作)。但是,您的报告也会汇总数据。如果您觉得您需要 R 中的整个对象,也许您可​​以将其保持为更紧凑的形式,例如作为 Rle(请参阅bioconductor.org/packages/release/bioc/html/S4Vectors.html),并为您的数据分成的任何子类别提供不同的 runValues。取决于附加信息的来源。例如:S4Vectors::Rle(paste(df$Sex, df$Age, sep=";"), df$ExpansionFactor)

标签: r expand survey


【解决方案1】:

我真的不明白你为什么需要这样的数据。您可以使用数据的加权汇总完美地创建报告,如下所示。

数据

library(ggplot2)
library(dplyr)

set.seed(123)

df <- data.frame(
  sex = sample(c("Male", "Female"), size = 100, replace = TRUE),
  age = rnorm(100, mean = 25, sd = 10),
  expansion.factor = sample(12:40, size = 100, replace = TRUE)
)

您可以创建摘要

df %>%
    group_by(sex) %>%
    summarise(
        count = sum(expansion.factor),
        mean_age = (sum(age * expansion.factor))/sum(expansion.factor),
        # There are packages with functions like this one
        mean_age2 = weighted.mean(age, expansion.factor)
    )

# A tibble: 2 x 4
  sex    count mean_age mean_age2
  <fct>  <int>    <dbl>     <dbl>
1 Female  1050     28.0      28.0
2 Male    1611     24.3      24.3

使用 ggplot2 进行可视化

df %>%
    ggplot(aes(x = age, weight = expansion.factor)) +
    geom_histogram(bins = 20)

【讨论】:

    猜你喜欢
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多