Rbind 不携带空 data.frame 的 colnames
Rbind does not carry the colnames of a empty data.frame over
如何使用空 data.frame 进行 rbind?它仅在至少有一行时才包含列名,但在列为空时不包含。空 data.frame 通常在 for 循环之前创建,所以这种行为很烦人。
示例:
test= data.frame(a=1, b=2, c=3)
rbind(test, c(3,4,5))
a b c
1 1 2 3
2 3 4 5
test= data.frame(matrix(ncol= 3, nrow= 0))
names(test) = c("a", "b", "c")
rbind(test, c(3,4,5))
X3 X4 X5
1 3 4 5
正如 Dan Y 指出的那样,这是预期的行为而不是错误。
data.table可以做到这一点
library(data.table)
# Create empty data.frame
test <- data.frame(matrix(ncol= 3, nrow= 0))
# Give it names
names(test) <- c("a", "b", "c")
# Coerce to data.table
setDT(test)
# rbind vector (set as a list)
x <- rbind(test, as.list(c(3,4,5)), use.names = F, fill = F)
# Coerce back to a data.frame if you wish
setDF(x)
x
> a b c
1 3 4 5
如何使用空 data.frame 进行 rbind?它仅在至少有一行时才包含列名,但在列为空时不包含。空 data.frame 通常在 for 循环之前创建,所以这种行为很烦人。
示例:
test= data.frame(a=1, b=2, c=3)
rbind(test, c(3,4,5))
a b c
1 1 2 3
2 3 4 5
test= data.frame(matrix(ncol= 3, nrow= 0))
names(test) = c("a", "b", "c")
rbind(test, c(3,4,5))
X3 X4 X5
1 3 4 5
正如 Dan Y 指出的那样,这是预期的行为而不是错误。
data.table可以做到这一点
library(data.table)
# Create empty data.frame
test <- data.frame(matrix(ncol= 3, nrow= 0))
# Give it names
names(test) <- c("a", "b", "c")
# Coerce to data.table
setDT(test)
# rbind vector (set as a list)
x <- rbind(test, as.list(c(3,4,5)), use.names = F, fill = F)
# Coerce back to a data.frame if you wish
setDF(x)
x
> a b c
1 3 4 5