如何根据R中的预先指定的列对数据框进行分组

时间:2014-02-13 10:07:54

标签: r dataframe

我的数据如下:

 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

小组BAR

   V1               V2                V3   
1 Unigene126925_All Unigene165366_All 0.247844
2 Unigene126925_All Unigene111784_All 0.344493

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

3 个答案:

答案 0 :(得分:3)

使用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结合起来。

答案 1 :(得分:3)

使用dplyr,非常直观。

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

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

答案 2 :(得分:1)

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

split(dt, dt$V1)