R Plyr重命名数据帧列表中的多个列

时间:2015-03-17 19:08:23

标签: r plyr

只是刚刚发现Plyr并且它为我节省了数吨组合多个数据帧的线路,这很棒。但是我有另一个我无法理解的重命名问题。

我有一个列表,其中包含许多数据帧(这是一个子集,因为实际列表中实际有108个)。

> str(mydata)
List of 4
 $ C11:'data.frame':    8 obs. of  3 variables:
  ..$ X                  : Factor w/ 8 levels "n >= 1","n >= 2",..: 1 2 3 4 5 6 7 8
  ..$ n.ENSEMBLE.COVERAGE: num [1:8] 1 1 1 1 0.96 0.91 0.74 0.5
  ..$ n.ENSEMBLE.RECALL  : num [1:8] 0.88 0.88 0.88 0.88 0.9 0.91 0.94 0.95
 $ C12:'data.frame':    8 obs. of  3 variables:
  ..$ X                  : Factor w/ 8 levels "n >= 1","n >= 2",..: 1 2 3 4 5 6 7 8
  ..$ n.ENSEMBLE.COVERAGE: num [1:8] 1 1 1 1 0.96 0.89 0.86 0.72
  ..$ n.ENSEMBLE.RECALL  : num [1:8] 0.91 0.91 0.91 0.91 0.93 0.96 0.97 0.98
 $ C13:'data.frame':    8 obs. of  3 variables:
  ..$ X                  : Factor w/ 8 levels "n >= 1","n >= 2",..: 1 2 3 4 5 6 7 8
  ..$ n.ENSEMBLE.COVERAGE: num [1:8] 1 1 1 1 0.94 0.79 0.65 0.46
  ..$ n.ENSEMBLE.RECALL  : num [1:8] 0.85 0.85 0.85 0.85 0.88 0.9 0.92 0.91
 $ C14:'data.frame':    8 obs. of  3 variables:
  ..$ X                  : Factor w/ 8 levels "n >= 1","n >= 2",..: 1 2 3 4 5 6 7 8
  ..$ n.ENSEMBLE.COVERAGE: num [1:8] 1 1 1 1 0.98 0.95 0.88 0.74
  ..$ n.ENSEMBLE.RECALL  : num [1:8] 0.91 0.91 0.91 0.91 0.92 0.94 0.95 0.98

我真正想要实现的是每个数据框都有前面带有数据帧标题的列。因此,在示例中,列将是:

C11.XC11.n.ENSEMBLE.COVERAGE& C11.n.ENSEMBLE.RECALL

C12.XC12.n.ENSEMBLE.COVERAGE& C12.n.ENSEMBLE.RECALL

C13.XC13.n.ENSEMBLE.COVERAGE& C13.n.ENSEMBLE.RECALL

C14.XC14.n.ENSEMBLE.COVERAGE& C14.n.ENSEMBLE.RECALL

有人能建议一种优雅的方法来重命名这样的列吗?

1 个答案:

答案 0 :(得分:3)

这是使用虹膜数据集的可重复示例:

# produce a named list of data.frames as sample data:
dflist <- split(iris, iris$Species)
# store the list element names:
n <- names(dflist)
# rename the elements:
Map(function(df, vec) setNames(df, paste(vec, names(df), sep = ".")), dflist, n)