有可能行绑定两个没有相同列集的数据帧吗?我希望保留绑定后不匹配的列。
当前回答
只是为了文档。你可以用下面的形式尝试Stack库和它的函数Stack:
Stack(df_1, df_2)
我也有一个印象,对于大数据集,它比其他方法更快。
其他回答
您可以在gtools包中使用smartbind。
例子:
library(gtools)
df1 <- data.frame(a = c(1:5), b = c(6:10))
df2 <- data.frame(a = c(11:15), b = c(16:20), c = LETTERS[1:5])
smartbind(df1, df2)
# result
a b c
1.1 1 6 <NA>
1.2 2 7 <NA>
1.3 3 8 <NA>
1.4 4 9 <NA>
1.5 5 10 <NA>
2.1 11 16 A
2.2 12 17 B
2.3 13 18 C
2.4 14 19 D
2.5 15 20 E
rbind.ordered=function(x,y){
diffCol = setdiff(colnames(x),colnames(y))
if (length(diffCol)>0){
cols=colnames(y)
for (i in 1:length(diffCol)) y=cbind(y,NA)
colnames(y)=c(cols,diffCol)
}
diffCol = setdiff(colnames(y),colnames(x))
if (length(diffCol)>0){
cols=colnames(x)
for (i in 1:length(diffCol)) x=cbind(x,NA)
colnames(x)=c(cols,diffCol)
}
return(rbind(x, y[, colnames(x)]))
}
只是为了文档。你可以用下面的形式尝试Stack库和它的函数Stack:
Stack(df_1, df_2)
我也有一个印象,对于大数据集,它比其他方法更快。
您也可以只取出公共列名。
> cols <- intersect(colnames(df1), colnames(df2))
> rbind(df1[,cols], df2[,cols])
data.table的替代方案:
library(data.table)
df1 = data.frame(a = c(1:5), b = c(6:10))
df2 = data.frame(a = c(11:15), b = c(16:20), c = LETTERS[1:5])
rbindlist(list(df1, df2), fill = TRUE)
Rbind也可以在数据中工作。表中只要对象都转换为数据。表对象,所以
rbind(setDT(df1), setDT(df2), fill=TRUE)
也适用于这种情况。当您有几个数据时,这可能更可取。表,而不想构造列表。
推荐文章
- 使用pandoc从Markdown转换为PDF时设置空白大小
- 使用pandas对同一列进行多个聚合
- ggplot2折线图给出“geom_path:每组只包含一个观测值。你需要调整群体审美吗?”
- 在Python Pandas中删除多个列中的所有重复行
- 将Pandas多索引转换为列
- 熊猫数据帧得到每组的第一行
- 导入文本文件为单字符字符串
- 为什么我的熊猫'应用'功能引用多列工作?
- 移除jupyter笔记本上的内核
- 提取一个dplyr tbl列作为向量
- 查找名称包含特定字符串的列
- 将空白值(空格)替换为pandas中的NaN
- 如何在R中绘制两个直方图?
- 显示/打印tibble的所有行(tbl_df)
- Pandas数据框架fillna()只有一些列到位