【问题标题】:Create a data.frame adding N rows of sampling functions创建一个添加 N 行采样函数的 data.frame
【发布时间】:2020-12-22 02:00:33
【问题描述】:

我正在努力创建一个随机样本的 data.frame。我举一个可重现的例子:

我有几个类似这样的自定义函数:

vendorSelector <- function() {
  sample(c("Paco", "Juan", "Alex", "Marc"), 1)
}

productSelector <- function() {
  sample(c("Water", "Oil", "Carbon", "Wood"), 1)
}

我实现了手动创建数据框:

data <- data.frame(Vendor = vendorSelector(), Product = productSelector(),
               stringsAsFactors = FALSE)

然后手动重复这行代码:

data <- rbind(data, c(Vendor = vendorSelector(), Product = productSelector()))

我的问题是我想生成一个 1000 行的 data.frame,我不想手动运行 999 次 rbind 块来实现它。你能帮我想想某种循环或自定义功能来实现它吗?谢谢。

【问题讨论】:

    标签: r dataframe loops


    【解决方案1】:

    直接一次性对1000行进行采样,需要设置replace=T,因为采样的item数量大于原始的items集合

    data.frame(Vendor = sample(c("Paco", "Juan", "Alex", "Marc"), 1000, replace=T), Product =  sample(c("Water", "Oil", "Carbon", "Wood"), 1000, replace=T),
                   stringsAsFactors = FALSE)  
    

    【讨论】:

    • 谢谢,您的解决方案让我有了继续我的数据项目的想法,也解决了我遇到的问题!
    【解决方案2】:

    您可以通过包含一个参数来更改您的函数,然后对 n 个观察值进行采样:

    productSelector <- function(n) {
      sample(c("Water", "Oil", "Carbon", "Wood"), n, replace = T)
    }
    
    vendorSelector <- function(n) {
      sample(c("Paco", "Juan", "Alex", "Marc"), n, replace = T)
    }
    
    data <- data.frame(Vendor = vendorSelector(10), Product = productSelector(10),
                       stringsAsFactors = FALSE)
    
    data
    
           Vendor Product
    1    Paco     Oil
    2    Paco  Carbon
    3    Juan     Oil
    4    Paco     Oil
    5    Marc  Carbon
    6    Juan     Oil
    7    Juan  Carbon
    8    Juan    Wood
    9    Alex     Oil
    10   Paco    Wood
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-20
      • 1970-01-01
      • 2019-03-21
      相关资源
      最近更新 更多