添加一列以清空data.frame

use*_*855 2 r dataframe

我想初始化data.frame外观中的列,以便:

df$newCol = 1
Run Code Online (Sandbox Code Playgroud)

其中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
Run Code Online (Sandbox Code Playgroud)

我可以通过将原始行更改为来解决此问题

df$newCol = rep(1,nrow(df))
Run Code Online (Sandbox Code Playgroud)

但这似乎有点笨拙,如果df中的行数很大,则计算量很大.这个问题有内置或标准的解决方案吗?或者我应该使用这样的自定义功能

addCol = function(df,name,value) {
  if(nrow(df)==0){
    df[,name] = rep(value,0)
  }else{
    df[,name] = value
  }
  df
}
Run Code Online (Sandbox Code Playgroud)

jak*_*kub 6

如果我理解正确,

df = mtcars[0, ]
df$newCol = numeric(nrow(df))
Run Code Online (Sandbox Code Playgroud)

应该是吗?

这假设你的意思是"行长度" nrows,在这种情况下你需要附加一个长度为0的向量.在这种情况下,numeric(nrow(df))将给你完全相同的结果rep(0, nrow(df)).

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

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