我试图向表中添加一行,虽然我可以让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个|
1条答案
按热度按时间8nuwlpux1#
当我希望基于名称“合并”行绑定表时,我倾向于使用
data.table::rbindlist(list(...), fill=TRUE, use.names=TRUE)
或仅使用dplyr::bind_rows(...)
,而不考虑缺少的列和列的顺序。为了做到这一点,我们确实需要名字相同,不过……
为了能够在单独的基数R中做到这一点,我们需要填写
df2
,以包括从df
开始的列(和顺序)。drop=FALSE
(重复),因为当列选择减少到单列时,基R的[
倾向于下降到向量,添加drop=FALSE
将其保持为帧*确保我们有所有相同的列:
df[NA,...]
是将所有值转换为各自的NA
类型(NA
至少有六种不同类型),通常最好确保合并的列类型是相同的(否则错误或逻辑问题);*确保列顺序一致:使用
newdf2
和最终newdf2[, names(df)]
是为了确保所有列的顺序完全相同