【问题标题】:Assign a specific number of random rows into datasets in R将特定数量的随机行分配到 R 中的数据集中
【发布时间】:2021-07-25 13:19:46
【问题描述】:

我有一个包含 54285 个观察值的数据集。我需要随机分配 50% 的行到另一个数据框中,30% 到另一个数据集中,其余的(20%)到另一个数据集中。这应该在没有重复的情况下完成。 这是一个例子:

data<-data.frame(numbers=c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
data
1
2
3
4
5
6
7
8
9
10
我期望的是:

df1
5
3
8
1
7

df2
2
4
9

df3
6
10

【问题讨论】:

    标签: r random assign


    【解决方案1】:

    将比率乘以数据集中的行数和split 数据以将它们划分为单独的数据帧。

    set.seed(123)
    result <- split(data, sample(rep(1:3, nrow(data) * c(0.5, 0.3, 0.2))))
    names(result) <- paste0('df', seq_along(result))
    list2env(result, .GlobalEnv)
    
    df1
    
    #   numbers
    #1        1
    #3        3
    #7        7
    #9        9
    #10      10
    
    df2
    #  numbers
    #4       4
    #5       5
    #8       8
    
    df3
    #  numbers
    #2       2
    #6       6
    

    对于使用 sampleprob 参数的大型数据框应该也可以工作。但是,请注意,这可能不会像上面的rep 答案那样为您提供您期望的确切行数。

    result <- split(data, sample(1:3, nrow(data), replace = TRUE, prob = c(0.5, 0.3, 0.2)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-17
      • 2017-09-21
      • 1970-01-01
      • 2021-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多