【发布时间】:2019-11-08 18:17:06
【问题描述】:
我想创建一个函数来合并具有不同列号的数据框列表,并且行具有我想保留的不同名称。本质上,我想堆叠数据框,其中列名只是成为要附加的另一行。
df <- list()
df[[1]] <- data.frame(d = c(4,5), e = c("c", "d"))
rownames(df[[1]]) <- c("df2_row_1", "df2_row_2")
df[[2]] <- data.frame(a = c(1,2,3), b = c("a", "b", "c"), c = c("one", "two", "three"))
rownames(df[[2]]) <- c("df1_row_1", "df1_row_2", "df1_row_3")
df[[3]] <- data.frame(f = c(6,7,8), g = c("e", "f", "g"), h = c("one", "two", "three"), w = c(100,101,102))
rownames(df[[3]]) <- c("df3_row_1", "df3_row_2", "df3_row_3")
电流输出:
do.call(bind_rows, df)
d e a b c f g h w
1 4 c NA <NA> <NA> NA <NA> <NA> NA
2 5 d NA <NA> <NA> NA <NA> <NA> NA
3 NA <NA> 1 a one NA <NA> <NA> NA
4 NA <NA> 2 b two NA <NA> <NA> NA
5 NA <NA> 3 c three NA <NA> <NA> NA
6 NA <NA> NA <NA> <NA> 6 e one 100
7 NA <NA> NA <NA> <NA> 7 f two 101
8 NA <NA> NA <NA> <NA> 8 g three 102
期望的输出
d e
df2_row_1 4 c
df2_row_2 5 d
a b c
df1_row_1 1 a one
df1_row_2 2 b two
df1_row_3 3 c three
f g h w
df3_row_1 6 e one 100
df3_row_2 7 f two 101
df3_row_3 8 g three 102
我已经尝试(未成功)创建一个函数来查找最长的数据帧,然后将空列附加到比最长的数据帧短的数据帧,然后为所有数据帧的每一列赋予相同的名称。
我也意识到这再糟糕不过了——这可能吗?
谢谢!!!
【问题讨论】:
-
在所需的输出中有值
c("a", "b", "c")在名称df2_row2下方的一行中(大概是第三行,但实际上很难分辨)。它们是您在输出中期望的实际值,还是只是显示绑定的 data.frames 的标题?如果是前者,你知道那里的"a"会强制整个列变成字符吗?
标签: r data.table rbind