我想初始化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)
如果我理解正确,
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速度很快,不应该受到伤害.