【发布时间】:2017-02-06 15:04:14
【问题描述】:
我有一个400行1200列的数据框,大致结构是这样的:
> df=data.frame(Col1=paste0('row',1:15),metric1=sample(c('H','M','L'),15,replace = 1),metric2=sample(c('H','M'),15,replace = 1))
> df
Col1 metric1 metric2 ...
1 row1 M H
2 row2 H L
我想做的是根据每列的 HML 计数比较每行的表格结果。
我试过了
> apply(df[,2:3],2,function(x) table(x))
$metric1
x
H L M
1 7 7
$metric2
x
H M
10 5
>
但结果是一个 1200 的列表,因为并非所有列都包含所有 3 个值,即一列只有 HL,而另一列将具有 HML。
我也试过聚合,结果报错
> apply(df[,2:3],2,function(x) aggregate(df$count,list(df[,x]),sum))
Error in `[.data.frame`(df, , x) : undefined columns selected
但我的功能有效:
> aggregate(df$count,list(df[,2]),sum)
Group.1 x
1 H 1
2 L 7
3 M 7
>
我希望将其保存为数据框,例如:
> data.frame(var=c('H','M','L'),metric1=c(100,100,200),metric2=c(250,150,0))
var metric1 metric2
1 H 100 250
2 M 100 150
3 L 200 0
>
【问题讨论】:
-
您只有这 3 个类别(H、L、M)还是更一般的类别?