我想初始化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
}
答案 0 :(得分:6)
如果我理解正确,
df = mtcars[0, ]
df$newCol = numeric(nrow(df))
应该是吗?
这假设“行长度”是指nrows
,在这种情况下你需要追加一个长度为0的向量。在这种情况下,numeric(nrow(df))
将给你完全相同的结果rep(0, nrow(df))
。
它还假设您只需要一个新列,而不是专门的列 - 那么您只需执行+1
,这是一个矢量化操作,因此速度很快。
除此之外,我不确定你可以有一个“空”列 - 向量应该与数据框中的其他向量具有相同数量的元素。但numeric
速度很快,不应该受到伤害。