我有一个看起来像这样的数据框,有两组(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
*编辑:我希望能够做一些事情,比如得到每个组的平均值或总和。
答案 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$L
和lst$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"))