【问题标题】:Sampling from a data table in R从 R 中的数据表中采样
【发布时间】:2018-03-18 22:09:54
【问题描述】:

我是 R 新手,我想知道如何从完全由 Excel 中的数字组成的 csv 文件中提取一定数量的样本。我设法将数据导入 R 并将每个数字用作一行,然后将随机行作为样本,但这似乎不切实际。整个文件显示为一列,我用下面的代码做了一些示例:

Heights[sample(nrow(Heights), 5), ]
[1] 1.84 1.65 1.73 1.70 1.72

另外请告诉我是否有办法重复此步骤至少 100 次并将每个样本保存在另一个图表中,以便以后使用。

【问题讨论】:

    标签: r random datatable


    【解决方案1】:

    这是采集 100 个样本并存储它们的方式:

    my_samples <- replicate(100, Heights[sample(nrow(Heights), 5), ])
    

    如果您的 .csv 文件只是用逗号分隔一种类型的值(高度),而不是结构化为表格,您可能希望将其转换为向量。大多数读取文本格式数据的 R 函数都会将数据转换为数据框或其他类似格式的表格。

    heights <- unlist(strsplit(readLines("yourfile.csv"), ","))
    

    readLines("yourfile.csv") 带有逗号分隔值的 .csv 文件会将其转换为字符向量。 strsplit() 然后为您完成分离工作。

    把这一切放在一起,用一个虚拟的例子:

    writeLines(c("1,2,3,4,5", "6,7,8,9,10"), "test.csv")
    heights <- as.numeric(unlist(strsplit(readLines("test.csv"), ",")))
    set.seed(123)
    my_samples <- replicate(100, sample(heights, 5))
    dim(my_samples)
    # [1]    5 100
    

    您可以看到 my_samples 是一个 5 行(每行对应于从 heights 采样的单个元素)和 100 列(每列对应于一百个采样事件之一)的矩阵。

    【讨论】:

    • 非常感谢。做到了。还有一个问题,如何从 my_samples 调用样本?它会像 my_samples[1] 一样,像其他语言一样吗?
    • 因为它的结构是一个矩阵(你可以用不同的方法),如果你想要 100 列中的一个,你可以使用my_matrix[row, column] 的形式,或者在这里,对于第 40 个样本,my_samples[ , 40]
    【解决方案2】:

    您可以使用用于引导的推断包。

    library(infer)
    rep_sample_n(size = 100, replace = TRUE, reps = 1)
    

    这里的“大小”是样本数。 “replace”(如果为真)允许您在采样时替换观察值 - 也就是说,您旋转轮盘赌轮而无需在轮盘出现数字时将其从轮盘上取下。 'reps' 允许您重复采样过程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-22
      • 2014-12-28
      • 1970-01-01
      • 1970-01-01
      • 2021-02-05
      • 2011-09-27
      • 1970-01-01
      相关资源
      最近更新 更多