我有一个名为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
作为向量?
答案 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"的melt
和dcast
,如下所示:
> 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")