如何创建具有指定列和R中行数的空数据框?

时间:2019-05-10 18:44:54

标签: r dataframe

我有两个数据框,希望能够一起绑定。它们中具有相似的信息,但顺序不同,列名称也不相同(这是字符串,整数和实数的混合,因此矩阵将不起作用)。

然后我要做的是将一个数据帧(我们称为new_df)转换为与另一个数据帧(我们称为old_df)相同的结构。

我想创建一个空数据框,其列结构为old_df,并且行数与new_df相同。

我知道我可以使用empty_df <- old_df[0,]创建其中的第一部分,但是如何指定行数?

我知道我要结束的行数,所以我想指定它。我在任何地方都找不到。

我想要的是这样的东西(如果可行的话):

empty_df <- old_df[rep(0,nrow(new_df)),]

我尝试过:

empty_df <- old_df[rep(0,nrow(new_df)),]

  • 这与old_df[0,]的0行相同

empty_df <- old_df[0,]

empty_df$ID <- new_df$ids

  • 显然这不起作用,因为我正尝试添加不同数量的行

1 个答案:

答案 0 :(得分:1)

如果我正确理解了这个问题,那么下面的破解将起到OP想要的作用。它通过直接设置row.names属性来创建行数。而且,如果数据框具有行名,则它必须具有相应的行。

empty_df <- old_df[0, ]
attr(empty_df, 'row.names') <- 1:nrow(new_df)

str(empty_df)
#'data.frame':  300 obs. of  5 variables:
# $ Sepal.Length: num 
# $ Sepal.Width : num 
# $ Petal.Length: num 
# $ Petal.Width : num 
# $ Species     : Factor w/ 3 levels "setosa","versicolor",..:

数据框empty_df现在有300行。

数据创建代码。

测试数据创建代码使用内置数据集iris

set.seed(1234)

old_df <- iris
new_df <- rbind(iris, iris)
new_df <- new_df[, sample(ncol(new_df))]