R语言如何按行合并数据框且不考虑列名(不使用r_bind/merge)
实现方法
核心逻辑很简单:按行索引直接赋值填充,完全跳过列名匹配环节,全程不需要用到rbind或者merge。
具体代码
# 先定义两个示例dataframe obj <- data.frame ( yr = c(1990, 1991, 1992, 1993, 1994, 1995), occ = c(223, 224, 225, 226, 227, 228) ) obj1 <- data.frame ( emp = c(10, 10, 10, 10, 10, 10), degree = c(1, 1, 1, 1, 1, 1) ) # 以obj1为输出基础框架,保留它的列名、列属性 res <- obj1 # 计算需要填充的行位置:紧跟在现有行的后面 start_row <- nrow(res) + 1 end_row <- nrow(res) + nrow(obj) # 直接把obj的内容按位置填充到对应行,全程不做列名校验 res[start_row:end_row, ] <- obj
效果验证
运行完上面的代码,得到的res输出和预期结果完全一致:
emp degree 1 10 1 2 10 1 3 10 1 4 10 1 5 10 1 6 10 1 1 1990 223 2 1991 224 3 1992 225 4 1993 226 5 1994 227 6 1995 228
注意事项
- 这个方法生效的前提是:两个dataframe的列数完全一致,否则会因为元素数量不匹配触发赋值报错——毕竟是按列的位置顺序填充,列数不一致根本没法对齐。
- 和
rbind的核心区别是:rbind在拼接时会强制校验列名、按列名匹配位置,列名不匹配就直接报错;而行索引赋值的逻辑只检查元素总个数对不对,完全不看列名是什么,填值的时候严格按照从左到右的列顺序、从上到下的行顺序填充,刚好匹配需求。
内容的提问来源于stack exchange,提问作者freddywit
相关产品推荐
相关产品推荐

