2016-09-15 53 views
3

我想隨機NA添加到R的data.frame到目前爲止,我已經研究過這些問題:添加隨機缺失值的精確比例data.frame

R: Randomly insert NAs into dataframe proportionaly

How do I add random NAs into a data frame

add random missing values to a complete data frame (in R)

很多方案都在這裏提供的,但我無法找到一個與這5個條件符合:

  • 用行或用列添加真隨機NA,而不是相同數量
  • 每類變量,人們可以在data.frame遇到工作(數字,字符,要素,邏輯,TS ..) ,所以輸出必須與輸入數據幀或矩陣具有相同的格式。 (在同一個地方產生,因爲幾個許多解決方案導致NA數量較少)的確切數量或比例[注] NA輸出的
  • 保證
  • 是對大數據集computationnaly高效。
  • 在輸入中獨立於已經存在的NA添加NA的比例/數量。

任何人有想法? 我已經試圖寫一個函數來做到這一點(在第一個鏈接的答案),但它不符合點3號& 4. 謝謝。

[注意]確切的比例,在+/- 1NA圓整當然。

+0

你可以詳細說明[這個答案](http://stackoverflow.com/a/27454361/3627607)對你來說還不夠嗎? (至少,檢查NA的比例和重做另一個傳球的失蹤比例也應該這樣做) – Tensibai

+0

@Tensibai是的,謝謝這就是我的意思,我想直接輸出合適的比例/數量的NA。如果你可以修改你的建議,以符合這一點,我會很高興 – agenis

+0

我不能,這是一個現有的答案,我不明白如何詳細闡述它。我不需要精確的%(這本身就是一種無意義的)。獲得NA的推理非常容易(如果不在NA的範圍內,那麼它就是「sum(is.na(df)/(nrow(df)* ncol(df))」,如果它在可以接受的範圍內,則再次進行NA加法運算 – Tensibai

回答

3

這是我爲我的論文做的一種方法,library(imputeMulti)目前正在JSS上審查。這將NA的數據插入整個數據集的一個隨機百分比中,並且可以很好地擴展,因爲n * p * pctNA %% 1 != 0的情況,它不會保證的確切數字

createNAs <- function (x, pctNA = 0.1) { 
    n <- nrow(x) 
    p <- ncol(x) 
    NAloc <- rep(FALSE, n * p) 
    NAloc[sample.int(n * p, floor(n * p * pctNA))] <- TRUE 
    x[matrix(NAloc, nrow = n, ncol = p)] <- NA 
    return(x) 
} 

顯然,你應該使用重複性隨機種子,可在函數調用之前指定。

這適用於創建基線數據集以便在插補方法間進行比較的一般策略。我相信這就是你想要的,儘管你的問題(如評論中指出的)沒有明確說明。

編輯:我確實假設x已完成。所以,我不確定它將如何處理現有的缺失數據。如果你願意,你當然可以修改代碼,雖然這可能會增加運行時間至少O(n * p)

+0

謝謝。這正是我需要的。我把我的問題編輯得更清楚一些,並提到一個比例的四捨五入。 – agenis