【问题标题】:Sampling randomly from an array of dataframes从一组数据帧中随机采样
【发布时间】:2017-06-01 05:40:38
【问题描述】:

我根据各种条件创建了多个数据框。现在我想对不同的数据帧进行采样,但我想在采样后删除这些行。我试过 dplyrs sample_n:

sample_n(df, 4)

问题是这不会删除线条,我是否需要一些递归循环来在采样后删除线条?或者有什么方便的功能可以帮到我?

【问题讨论】:

  • 请提供一个可重复的小例子和预期的输出
  • 看看modelr tidyverse 方法的包。
  • @akrun 没有问同样的问题。我不只是想对数据帧进行采样,一旦我对后续时间进行采样,我就不需要再次采样相同的数据。
  • 我认为它可以像here 一样被归类为一般欺骗。无论如何,如果您觉得它令人反感,我将重新打开它
  • @akrun,我认为是我的错没有正确地阐述标题。

标签: r dplyr


【解决方案1】:

为我工作。

# generate data
a <- data.frame(letters = letters[1:5], var = rnorm(5))
b <- data.frame(letters = letters[6:10], var = rnorm(5))
c <- data.frame(letters = letters[11:15], var = rnorm(5))
xy <- list(a, b, c)

set.seed(357) # set seed for reproducibility
dfsample <- sample(seq_len(length(xy)), 1) # sample out one data.frame

xy[[dfsample]]

  letters         var
1       a  1.51348192
2       b -0.60657737
3       c  0.51828252
4       d -0.05352487
5       e -1.34303266

# remove random row, notice the minus sign in front of the sample
xy[[dfsample]] <- xy[[dfsample]][-sample(1:nrow(xy[[dfsample]]), 1), ]
xy[[dfsample]]

  letters         var
2       b -0.60657737
3       c  0.51828252
4       d -0.05352487
5       e -1.34303266

【讨论】:

  • seq_len(length(xy)) 而不是 seq_along(xy) 的任何特殊原因?
  • 反应很好,确实可以实现递归函数,非常感谢您的帮助!
  • @Axeman 我很少关注那部分,所以没有特别的原因。
【解决方案2】:
modelr::crossv_mc(mtcars, 5, 0.5)

创建 5 组大小相等的独占拆分。它们以列表列的形式存储,并使用内存高效的resample 类。

# A tibble: 5 × 3
           train           test   .id
          <list>         <list> <chr>
1 <S3: resample> <S3: resample>     1
2 <S3: resample> <S3: resample>     2
3 <S3: resample> <S3: resample>     3
4 <S3: resample> <S3: resample>     4
5 <S3: resample> <S3: resample>     5

【讨论】:

    猜你喜欢
    • 2012-08-09
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多