如何将rbind保存到data_table [已解决]

5kgi1eie  于 2023-06-19  发布在  其他
关注(0)|答案(1)|浏览(81)

我试图向表中添加一行,虽然我可以让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)

| 日期|0| 1| 2|
| - -----|- -----|- -----|- -----|
| 2019 - 01 - 21 10:00:00| 4| 5个|5个|
| 2019 - 01 - 21 10:00:00| 4| 3| 3|

df2 <- data.frame(V1 = 2,
                     V2 = 4,
                     V3 = 5)

| V1| V2| V3|
| - -----|- -----|- -----|
| 2| 4| 5个|
我试图在第一个表的最后一行下面添加V1、V2和V3的值,但仅适用于0:3列。我尝试的代码如下:

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.

这是我想要保存的输出:
| 日期|0| 1| 1|
| - -----|- -----|- -----|- -----|
| 2019 - 01 - 21 10:00:00| 4| 5个|5个|
| 2019 - 01 - 21 10:00:00| 4| 3| 3|
| | 2| 4| 5个|

8nuwlpux

8nuwlpux1#

当我希望基于名称“合并”行绑定表时,我倾向于使用data.table::rbindlist(list(...), fill=TRUE, use.names=TRUE)或仅使用dplyr::bind_rows(...),而不考虑缺少的列和列的顺序。
为了做到这一点,我们确实需要名字相同,不过……

library(data.table)
rbindlist(list(df, setNames(df2, names(df)[-1])),
          use.names = TRUE, fill = TRUE)
#          DATE     0     1     2
#        <char> <num> <num> <num>
# 1: 07/01/2022     4     5     5
# 2: 08/01/2022     4     3     3
# 3:       <NA>     2     4     5

library(dplyr)
bind_rows(df, setNames(df2, names(df)[-1]))
#         DATE 0 1 2
# 1 07/01/2022 4 5 5
# 2 08/01/2022 4 3 3
# 3       <NA> 2 4 5

为了能够在单独的基数R中做到这一点,我们需要填写df2,以包括从df开始的列(和顺序)。

names(df2) <- names(df)[-1]
newdf2 <- cbind(df[NA,][1,setdiff(names(df), names(df2)),drop=FALSE], df2)
rbind(df, newdf2[,names(df)])
#          DATE 0 1 2
# 1  07/01/2022 4 5 5
# 2  08/01/2022 4 3 3
# NA       <NA> 2 4 5
  • 我们需要drop=FALSE(重复),因为当列选择减少到单列时,基R的[倾向于下降到向量,添加drop=FALSE将其保持为帧
    *确保我们有所有相同的列df[NA,...]是将所有值转换为各自的NA类型(NA至少有六种不同类型),通常最好确保合并的列类型是相同的(否则错误或逻辑问题);
    *确保列顺序一致:使用newdf2和最终newdf2[, names(df)]是为了确保所有列的顺序完全相同

相关问题