【问题标题】:How to group a data frame based on pre-specified column in R如何根据 R 中预先指定的列对数据框进行分组
【发布时间】:2014-02-13 10:07:53
【问题描述】:

我有一个如下所示的数据:

 library(zoo)
 dt <- read.csv("http://dpaste.com/1612639/plain/",header=FALSE,fill=FALSE,na.strings = "")
 dt <- na.locf(dt)


> dt
   V1  V2                V3                V4       V5
1 FOO yyy Unigene126925_All Unigene137063_All 0.238087
2 FOO yyy Unigene126925_All  Unigene24551_All 0.374231
3 FOO yyy Unigene126925_All  Unigene31835_All 0.367897
4 BAR xxx Unigene126925_All Unigene165366_All 0.247844
5 BAR xxx Unigene126925_All Unigene111784_All 0.344493

我想要做的是根据 V1 对它们进行分组,每组的内容是一个数据框,其值从上述 V3 到 V5。 它看起来像这样:

组 FOO

     V1               V2                V3             
1 Unigene126925_All Unigene137063_All 0.238087
2 Unigene126925_All  Unigene24551_All 0.374231
3 Unigene126925_All  Unigene31835_All 0.367897

组栏

   V1               V2                V3   
1 Unigene126925_All Unigene165366_All 0.247844
2 Unigene126925_All Unigene111784_All 0.344493

如何在 R 中实现这一点? 稍后对于每个组,我将对其数据框应用一些函数。

【问题讨论】:

  • base R、data.tableplyr 等中有大量函数,您可以在其中对分组数据应用函数,而无需显式将其拆分为单独的数据帧。

标签: r dataframe


【解决方案1】:

使用split:

> split(dt[, 3:5], dt$V1)
$BAR
                 V3                V4       V5
4 Unigene126925_All Unigene165366_All 0.247844
5 Unigene126925_All Unigene111784_All 0.344493

$FOO
                 V3                V4       V5
1 Unigene126925_All Unigene137063_All 0.238087
2 Unigene126925_All  Unigene24551_All 0.374231
3 Unigene126925_All  Unigene31835_All 0.367897

您现在可以在此列表上运行一些函数并将结果与​​unsplit 结合起来。

【讨论】:

    【解决方案2】:

    使用dplyr,非常直观。

    library(dplyr)
    dt %.%
     group_by(V1) %.%
     summarise(newvar = function))
    

    其中 function 是您要应用的功能,例如newvar = sum(V5)

    【讨论】:

      【解决方案3】:

      如果我没记错的话(并且您可能还希望将第一个参数分割到您需要的列,例如删除“V1”):

      split(dt, dt$V1)
      

      【讨论】:

        猜你喜欢
        • 2020-12-26
        • 2020-08-05
        • 2020-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多