R Plyr重命名数据框列表中的多列
R Plyr Rename multiple columns in list of dataframes
才刚刚发现 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.X
、C11.n.ENSEMBLE.COVERAGE
& C11.n.ENSEMBLE.RECALL
C12.X
、C12.n.ENSEMBLE.COVERAGE
& C12.n.ENSEMBLE.RECALL
C13.X
、C13.n.ENSEMBLE.COVERAGE
& C13.n.ENSEMBLE.RECALL
C14.X
、C14.n.ENSEMBLE.COVERAGE
& C14.n.ENSEMBLE.RECALL
谁能推荐一种像这样重命名列的优雅方法?
这是一个使用鸢尾花数据集的可重现示例:
# 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)
才刚刚发现 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.X
、C11.n.ENSEMBLE.COVERAGE
& C11.n.ENSEMBLE.RECALL
C12.X
、C12.n.ENSEMBLE.COVERAGE
& C12.n.ENSEMBLE.RECALL
C13.X
、C13.n.ENSEMBLE.COVERAGE
& C13.n.ENSEMBLE.RECALL
C14.X
、C14.n.ENSEMBLE.COVERAGE
& C14.n.ENSEMBLE.RECALL
谁能推荐一种像这样重命名列的优雅方法?
这是一个使用鸢尾花数据集的可重现示例:
# 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)