首页 > 解决方案 > 从 data.frames 列表中拆分 data.frame、排序和子集

问题描述

我有一个大的data.frame,看起来像这样:

   Statistic1    fdr1     Value1   Statistic2  fdr2   Value2
       2        0.0001    Signif      1.8      0.001   Signif 
      0.3        0.13       0          5        0.5      0
      1.5        0.01     Signif      0.4      0.009   Signif

我想将数据框每 3 列拆分一次,例如 Statistic1、fdr1 和 Value1。然后按 Statistic* 列按降序对每个拆分的 data.frame 进行排序,并取每个排序后的 data.frames 的前 20 行名称,这些行名对应于排序后的 data.frame 的 Value* 列中的 Signif 标签。

期望的输出

>       df1         

>        Statistic1    fdr1     Value1   
>            2        0.0001    Signif            
>           1.5        0.01     Signif     

>        Statistic2    fdr2     Value2
>           1.8        0.001    Signif 
>           0.4        0.009    Signif

从每个单独的 data.frame 中,我将获取前 20 个行名。

任何人都可以帮助我吗?

标签: r

解决方案


您可以使用 分割数据框split.default。遍历列表并执行所需的操作。翻译你的要求会给,

lapply(split.default(df, gsub('\\D+', '', names(df))), function(i) 
                                                {i <- i[i[3] != 0,];
                                                 i <- i[order(i[1], decreasing = TRUE),]; 
                                                 i[1:20,]})

但是,请注意,由于您的示例只有 3 行,因此执行最后一个条件 ( 1:20) 将导致NA


推荐阅读