2016-10-03 108 views
0

我想初始化一個data.frame列看起來如此:添加一列空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 
} 

回答

5

如果我理解正確,一些自定義功能,

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

應該會吧?

這是假設通過「行長度」你的意思nrows,在這種情況下,需要追加長度爲0的矢量。在這種情況下,numeric(nrow(df))會給你完全相同的結果作爲rep(0, nrow(df))

它也假定你只需要一個新的列,而不是專門的列 - 那麼你會簡單地做+1,這是一個向量化的操作,因此很快。

除此之外,我不確定你可以有一個「空」列 - 矢量應該有與數據框中其他矢量相同數量的元素。但numeric是快,它不應該傷害。