【问题标题】:subset a fixed number of values for each group in another column为另一列中的每个组设置固定数量的值的子集
【发布时间】:2020-07-28 14:46:27
【问题描述】:

我有一个数据框,其中一列中包含多个物种,另一列中包含程序集的名称。每个物种都有不同数量的组件;

especies1 --- assembly1
especies1 --- assembly2
especies1 --- assembly3
especies1 --- assemblyN

especies2 --- assembly1
especies2 --- assembly2
especies2 --- assemblyN

问题是每个物种都有不同的大量装配(1000-100000 个装配),所以我想生成一个 df,每个物种随机选择 150 个装配。

这样,每个物种的组件数量完全相同。

我真的被阻止了,

我会很感激任何建议! 问候!

【问题讨论】:

    标签: r loops substring subset


    【解决方案1】:

    考虑by物种分割数据框,然后在每个子集中随机抽取150个组件

    # BUILD LIST OF SAMPLED DATA FRAMES BY SPECIES
    samples_list <- by(mydata, mydata$species, function(sub) sub[sample(nrow(sub), 150),])
    
    # COMBINE LIST TO A SINGLE DATA FRAME
    sample_df <- do.call(rbind, samples_list)
    

    以上解释:

    • bytapply 的面向对象函数(也是 apply 系列的一部分),本质上按指定的分组对输入数据帧 mydata 进行切片列,mydata$species,然后将每个子集数据框传递到给定名称的function 调用中,sub
    • functionsample 内运行子集数据帧的所有行,选取 150 个不替换。此示例返回一个包含 150 个行号的向量,并使用 extract [ 函数使用行索引进一步子集数据帧,格式为:dataframe[row_index,];
    • do.call + rbindrbind 每个数据帧和更长格式的简写:rbind(samples_list[[1]], samples_list[[2]], samples_list[[3]], ...)

    【讨论】:

    • 谢谢!它工作得很好 XD 我会试着理解你代码的每一步。
    • 谢谢 Parfait,它有很大帮助!在这个疯狂而悲伤的时刻,问候并保重......
    猜你喜欢
    • 1970-01-01
    • 2022-08-07
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 2021-02-21
    • 1970-01-01
    相关资源
    最近更新 更多