【问题标题】:Sample a list of dataframes in R在 R 中对数据框列表进行采样
【发布时间】:2020-03-18 16:16:19
【问题描述】:

我有一个由 16 个数据框 (dientes) 组成的列表。我想在每个数据帧中对 80% 的行进行抽样而不进行替换。我尝试了这些lapply() 函数但没有成功:

index <- lapply(1:nrow(dientes), sample, round(0.8*nrow), replace = F)
index <- lapply(dientes, sample, round(0.8*nrow), replace = F)

我哪里错了?

【问题讨论】:

    标签: r list dataframe lapply sample


    【解决方案1】:

    如果index 应该包含采样的data.frames 列表,您可以这样做:

    ## mock list of data.frames
    dientes <- list(A=mtcars, B=iris, C=volcano)
    
    ## count input rows
    lapply(dientes, nrow)
    #> $A
    #> [1] 32
    #> 
    #> $B
    #> [1] 150
    #> 
    #> $C
    #> [1] 87
    
    index <- lapply(dientes, function(x) x[sample(nrow(x), round(0.8*nrow(x))), ])
    
    ## count output rows
    lapply(index, nrow)
    #> $A
    #> [1] 26
    #> 
    #> $B
    #> [1] 120
    #> 
    #> $C
    #> [1] 70
    

    reprex package (v0.3.0) 于 2020-03-18 创建

    【讨论】:

      【解决方案2】:

      我会做以下事情:

      index <- lapply(dientes, function(x){x[sample(x, round(0.8*nrow(x)), replace = F),]})
      

      lapply 将列表 dientes 作为输入

      function(x){..} 对每个元素应用你想要的操作

      x 是每个元素,您可以使用 x[sample(...),] 从其中获取行

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-09
        • 1970-01-01
        • 2018-08-21
        • 2019-03-19
        • 2018-12-18
        • 1970-01-01
        相关资源
        最近更新 更多