如何在R中重新格式化数据框?

时间:2016-06-15 17:55:25

标签: r dataframe

我有一个看起来像这样的数据框,有两组(L,R):

    Group   Value
1     L   0.04058678
2     L   0.11657916
3     L   0.08382576
4     L   0.17477007
5     L   0.08214530
6     L   0.15685707
7     L   0.08237982
8     R   0.06680679
9     R   0.05153584
10    R   0.08919266

如何将其格式化为这样,其中组是一列,所有值都属于每个组的列:

      L         R
  0.11657916 0.0668067
  0.08382576 0.05153584
  0.17477007 0.08919266
  0.08214530
  0.15685707
  0.08237982

*编辑:我希望能够做一些事情,比如得到每个组的平均值或总和。

1 个答案:

答案 0 :(得分:4)

正如@Psidom在评论中所建议的那样,列表更适合具有此类格式的数据。

您可以尝试使用df1从数据框split()创建一个列表:

lst <- split(df1,df1$Group)
> lst
#$L
#  Group      Value
#1     L 0.04058678
#2     L 0.11657916
#3     L 0.08382576
#4     L 0.17477007
#5     L 0.08214530
#6     L 0.15685707
#7     L 0.08237982
#
#$R
#   Group      Value
#8      R 0.06680679
#9      R 0.05153584
#10     R 0.08919266

从此列表中,可以通过索引(lst[[1]]lst[[2]])或按名称(lst$Llst$R)提取单个data.frames,如果需要,可以单独保存和处理。

在评论中已经清楚地表明,在这种情况下不需要分离成不同数据框的列表。如果唯一目的是对组执行统计,aggregate()比使用split()预处理数据更简单。

以下是两个例子:

aggregate(Value~Group, df1, mean)
#  Group      Value
#1     L 0.10530628
#2     R 0.06917843

aggregate(Value~Group, df1, sum)
#  Group     Value
#1     L 0.7371440
#2     R 0.2075353

数据:

df1 <- structure(list(Group = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
2L, 2L, 2L), .Label = c("L", "R"), class = "factor"), Value = c(0.04058678, 
0.11657916, 0.08382576, 0.17477007, 0.0821453, 0.15685707, 0.08237982, 
0.06680679, 0.05153584, 0.08919266)), .Names = c("Group", "Value"
), class = "data.frame", row.names = c("1", "2", "3", "4", "5", 
"6", "7", "8", "9", "10"))