【问题标题】:Create two datasets by equally dividing rows based on postal codes in R通过基于 R 中的邮政编码等分行来创建两个数据集
【发布时间】:2020-08-21 16:49:00
【问题描述】:

我有一个包含客户代码、客户姓名和邮政编码的数据集。数据集有 149130 行。我想将它平均分成两个数据集(每个数据集 74565 行)并导出到 excel 中。但是我想确保如果一个邮政编码有两个客户 - 一个去dataset1,另一个去dataset2。其余的可以是随机选择的客户。我是 r 新手,尝试过各种训练/测试和示例代码 - 但是我无法达到所需的结果。

总结一下 - 我正在尝试从数据框中创建 2 个随机样本,但想确保如果某个邮政编码下的客户超过 2 个 - 他们应该在两个样本之间平均分配。

样本数据 -

enter image description here TIA

【问题讨论】:

标签: r random dplyr tidyverse purrr


【解决方案1】:

我的一般做法是:

  • 从起始数据集中创建一个具有唯一邮政编码的额外数据集
  • 如果需要,随机随机播放
  • 把它分成两半
  • 右连接起始数据集,其中一半在邮政编码上以获得第一个样本,另一半获得第二个样本

【讨论】:

    【解决方案2】:

    让我们制作一些可重现的数据。

    set.seed(2020)
    zipcode <- sample.int(10000:99999, size = 149130, replace = TRUE)
    zipcode <- stringr::str_pad(as.character(zipcode), width = 5, pad = "0")
    custname <- sample(letters, size = 149130, replace = TRUE)
    customers <- data.frame(zipcode = zipcode, custname = custname)
    str(customers)
    #> 'data.frame':    149130 obs. of  2 variables:
    #>  $ zipcode : chr  "09628" "09452" "07767" "08920" ...
    #>  $ custname: chr  "k" "y" "n" "a" ...
    

    那就让caret 做所有的辛苦工作吧。它添加了一列,然后您可以使用该列将一个数据帧拆分为 2。我 head 结果但人工检查是您尽可能接近 50/50

    customers$whichsample <- caret::createFolds(factor(customers$zipcode), 
                                                       k = 2, 
                                                       list = FALSE )
    
    head(table(customers$zipcode, customers$whichsample))
    #>        
    #>          1  2
    #>   00001  8  7
    #>   00002  4  5
    #>   00003  8  7
    #>   00004  7  6
    #>   00005  7  8
    #>   00006 11 11
    

    随后要求展示如何划分为两个单独的数据帧。假设你想要csample1csample2 的安全和慢tidy 方法

    csample1 <- customers %>% filter(whichsample == 1)
    csample2 <- customers %>% filter(whichsample == 2)
    
    

    reprex package (v0.3.0) 于 2020 年 5 月 6 日创建

    【讨论】:

    • 谢谢。这对我来说是一个好的开始。如何从中创建两个数据框,我将在其中获得两个示例中客户代码的确切列表?
    • YW,已添加到答案中,如果符合您的需求,请标记为正确
    猜你喜欢
    • 2019-10-02
    • 2020-04-19
    • 2017-01-27
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    相关资源
    最近更新 更多