[問題] dataframe資料隨機賦值

作者: F0011010101 (法客)   2017-11-10 17:56:10
[問題類型]:
程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來)
效能諮詢(我想讓R 跑更快)
[軟體熟悉度]:
入門(寫過其他程式,只是對語法不熟悉)
[問題敘述]:
小弟想請問一下,我想把資料框架中的資料以隨機的方式賦值為NA
但總覺得自己的方法效率不高,所以來版上請教大家
有沒有比較好的寫法
我自己的程式碼如下
[程式範例]:
nr <- 10000
nc <- 10
n <- nr*nc
data <- as.data.frame(matrix(rnorm(n),nrow = nr))
#方法1 可行,但總覺得效率不高
abc <- stack(data)
abc$values[sample(n, n/10)] <- NA
data2 <- as.data.frame(matrix(abc$values, nrow = nr))
#方法2 這個比較有瑕疵,不夠隨機,也無法控制總共有幾個NA值
data3 <- cbind.data.frame(
lapply(data, function(x, n = rnorm(1, mean = nr/10, sd = nr^(1/4))){
x[sample(nr,n)] <- NA
return(x)
})
)
sum(is.na(data3))
方法二中
雖然想避免讓每一行的NA數都固定
卻變得無法控制NA的總數
有點自己絆自己腳的感覺...
至於速度是比第一種快的
[環境敘述]:
[關鍵字]:
作者: clansoda (小笨)   2017-11-10 18:06:00
電腦裡面有完全隨機這種事嗎 不是跟seed有關係嗎
作者: HumuHumu (呼姆呼姆)   2017-11-10 18:18:00
隨機的意思是:服從某個機率分布,所以你的機率分布要什麼
作者: andrew43 (討厭有好心推文後刪文者)   2017-11-10 18:57:00
對方法一有什麼關卡嗎?還是它的結果不對?隨機放NA的限制也應補充,例如限制欄內NA數?限制總NA數還是都不限而單給定一個機率變NA?是。方法一是限制總NA數。如果這是你要的結果,那方法一已經很快了。我唯一可以再挑的就是轉data frame再stack那段是多餘的但其實並沒有額外增加多少運算時間,是可以接受的方法。
作者: ypsc (愛愛愛)   2017-11-11 17:51:00
隨機從亂數表裡面取值當作data frame的index賦值
作者: celestialgod (天)   2017-11-13 22:55:00
轉成data.table用迴圈,每一個column做就好數量可以每一個column隨機抽用data.table的set,迴圈很快https://pastebin.com/nRG31zBV

Links booklink

Contact Us: admin [ a t ] ucptt.com