如何将rbind结果保存至原数据框并添加指定行
问题:向数据框追加行并保存至原数据框
示例数据
df <- data.frame(DATE = c('07/01/2022', '08/01/2022'), `0` = c(4, 4), `1` = c(5, 3), `2` = c(5,3), check.names = FALSE)
| DATE | 0 | 1 | 2 |
|---|---|---|---|
| 07/01/2022 | 4 | 5 | 5 |
| 08/01/2022 | 4 | 3 | 3 |
df2 <- data.frame(V1 = 2, V2 = 4, V3 = 5)
| V1 | V2 | V3 |
|---|---|---|
| 2 | 4 | 5 |
需求
将df2的V1、V2、V3值对应填入df的0、1、2列的最后一行,DATE列留空,最终结果覆盖原df。
尝试的代码及错误
df[2:4] <- rbind(df[2:4], setNames(data.frame(TOTAL = 'Weights', df2), names(df[2:4])))
运行后报错:
✖ Existing data has 3 rows. ✖ Element 1 of assigned data has 4 rows. ℹ Only vectors of size 1 are recycled.
解决方案
方法1:构造新行后合并
先构造与df列名匹配的新行,再用rbind追加并覆盖原数据框:
# 构造要追加的行,DATE列留空,对应列匹配df2的值 new_row <- data.frame( DATE = "", `0` = df2$V1, `1` = df2$V2, `2` = df2$V3, check.names = FALSE ) # 追加到原数据框并保存 df <- rbind(df, new_row)
方法2:简洁写法(转置df2并重命名)
利用转置快速匹配列,同时保持列名一致:
# 转置df2并设置列名与df一致,DATE列留空 new_row <- setNames(data.frame(DATE = "", t(df2)), names(df)) # 追加行 df <- rbind(df, new_row)
最终结果
| DATE | 0 | 1 | 2 |
|---|---|---|---|
| 07/01/2022 | 4 | 5 | 5 |
| 08/01/2022 | 4 | 3 | 3 |
| 2 | 4 | 5 |
内容的提问来源于stack exchange,提问作者nwk123
相关产品推荐
相关产品推荐

