包含数据帧列表的数据透视表

时间:2015-02-17 06:40:08

标签: r list dataframe

我有一个名为means数据框的列表(第1列是活动名称,第2列是相应的持续时间),如下所示:

> means
[[1]]
             X$activity  X$netTime
1               bolting  173.69014
2    boltingPreparation   13.70000
3 boltingRepositionning   18.17647
4        cutPreparation   26.66667


[[2]]
             X$activity   X$netTime
1               bolting   201.03297
2    boltingPreparation    34.10000
3 boltingRepositionning    22.72857
4               nonProd     0.00000

我想在一个' pivot-table'中删除此列表。方式如下:

> my.data.frame
               activity  1          2
1               bolting  173.69014  201.03297
2    boltingPreparation  13.70000   34.10000
3 boltingRepositionning  18.17647   22.72857
4        cutPreparation  26.66667   NA
5               nonProd  NA         0.00000

我觉得lapply功能可能有所帮助,但不知道从哪里开始...

相关问题:我如何在列表{activity,netTime}的所有索引中提取所有activity == 'bolting'元组(例如)means作为向量?

2 个答案:

答案 0 :(得分:1)

您可以尝试merge

Reduce(function(...) merge(..., by='X$activity', all=TRUE), means)
#                 X$activity X$netTime.x X$netTime.y
# 1               bolting   173.69014   201.03297
# 2    boltingPreparation    13.70000    34.10000
# 3 boltingRepositionning    18.17647    22.72857
# 4        cutPreparation    26.66667          NA
# 5               nonProd          NA     0.00000

答案 1 :(得分:0)

我能想到的最易于推广的解决方案是使用来自" reshape2"的meltdcast,如下所示:

> library(reshape2)
> dcast(melt(means, id.vars = "X$activity"), `X$activity` ~ L1, value.var = "value")
             X$activity         1         2
1               bolting 173.69014 201.03297
2    boltingPreparation  13.70000  34.10000
3 boltingRepositionning  18.17647  22.72857
4        cutPreparation  26.66667        NA
5               nonProd        NA   0.00000

使用melt也可以帮助您提取需求 - 只需查看melt(means, id.vars = "X$activity")的输出,即可了解如何将数据放入" long"形式有利于子集化。

您也可以在基地R中执行以下操作:

> A <- do.call(rbind, lapply(seq_along(means), function(x) cbind(ind = x, means[[x]])))
> reshape(A, direction = "wide", idvar = "X$activity", timevar = "ind")