添加一列以清空data.frame

时间:2016-10-03 14:18:17

标签: r dataframe

我想初始化data.frame中的列,所以:

df$newCol = 1

其中df是我之前定义的data.frame,已经完成了一些处理。只要nrow(df)> 0,这不是问题,但有时我的data.frame的行长度为0,我得到:

> df$newCol  = 1
Error in `[[<-`(`*tmp*`, name, value = 1) :
 1 elements in value to replace 0 elements

我可以通过将原始行更改为

来解决此问题
df$newCol = rep(1,nrow(df))

但是这看起来有点笨拙,如果df中的行数很大,则计算量很大。这个问题有内置或标准的解决方案吗?或者我应该使用像这样的自定义函数

addCol = function(df,name,value) {
  if(nrow(df)==0){
    df[,name] = rep(value,0)
  }else{
    df[,name] = value
  }
  df
}

1 个答案:

答案 0 :(得分:6)

如果我理解正确,

df = mtcars[0, ]
df$newCol = numeric(nrow(df))

应该是吗?

这假设“行长度”是指nrows,在这种情况下你需要追加一个长度为0的向量。在这种情况下,numeric(nrow(df))将给你完全相同的结果rep(0, nrow(df))

它还假设您只需要一个新列,而不是专门的列 - 那么您只需执行+1,这是一个矢量化操作,因此速度很快。

除此之外,我不确定你可以有一个“空”列 - 向量应该与数据框中的其他向量具有相同数量的元素。但numeric速度很快,不应该受到伤害。