r - 将数据帧列表合并为一个保留行名

标签 r data.table plyr dplyr

我确实知道将数据帧列表与been answered before合并为一个的基本知识。但是,我对维护行名的智能方法感兴趣。假设我有一个相当相等的数据帧列表,并将它们保存在一个命名列表中。

library(plyr)
library(dplyr)
library(data.table)

a = data.frame(x=1:3, row.names = letters[1:3])
b = data.frame(x=4:6, row.names = letters[4:6])
c = data.frame(x=7:9, row.names = letters[7:9])

l = list(A=a, B=b, C=c)

当我使用do.call时,列表名称与行名称结合在一起:
> rownames(do.call("rbind", l))
[1] "A.a" "A.b" "A.c" "B.d" "B.e" "B.f" "C.g" "C.h" "C.i"

当我使用rbind.fillbind_rowsrbindlist中的任何一个时,行名将替换为数字范围:
> rownames(rbind.fill(l))
> rownames(bind_rows(l))
> rownames(rbindlist(l))
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9"

当我从列表中删除名称时,do.call产生所需的输出:
> names(l) = NULL
> rownames(do.call("rbind", l))
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i"

那么,有没有我缺少的功能可以对行名提供更好的控制?我确实需要其他上下文的名称,因此删除它们不是最佳的。

最佳答案

要保留行名,您可以简单地执行以下操作:

do.call(rbind, unname(l))

#  x
#a 1
#b 2
#c 3
#d 4
#e 5
#f 6
#g 7
#h 8
#i 9

或通过将l的行名设置为NULL来加下划线,也可以通过以下方法完成:
do.call(rbind, setNames(l, NULL))

关于r - 将数据帧列表合并为一个保留行名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31140054/

相关文章:

xml - 在 R 中将 XML 数据转换为平面文件

在 Slidify 的幻灯片中渲染 rCharts

使用高度重复的键减少data.table的内存占用

r - 从非序列表计算经过的天数

r 顺序数值

r - R 中的幽灵因子水平

r - 在 R Shiny 中用 plotly 剪裁的 barplot 剪裁的轴标签和标题

r - 在data.table中,使用.SD时在j中取点(.)和 'c'有什么区别?它是如何工作的?

r - 粘贴两个数据框的列

r - data.frames 列表中元素的平均值