[問題] dataframe資料隨機賦值

看板R_Language作者 (河馬河馬)時間6年前 (2017/11/10 17:56), 6年前編輯推噓1(1014)
留言15則, 5人參與, 6年前最新討論串1/1
[問題類型]: 程式諮詢(我想用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的總數 有點自己絆自己腳的感覺... 至於速度是比第一種快的 [環境敘述]: [關鍵字]: -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.164.79.137 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1510307773.A.CF2.html

11/10 18:06, 6年前 , 1F
電腦裡面有完全隨機這種事嗎 不是跟seed有關係嗎
11/10 18:06, 1F
的確講完全隨機好像不太好 我改一下

11/10 18:18, 6年前 , 2F
隨機的意思是:服從某個機率分布,所以你的機率分布要什
11/10 18:18, 2F

11/10 18:18, 6年前 , 3F
11/10 18:18, 3F
每個欄位被賦予NA值的機率都一樣 應該是Uniform吧

11/10 18:57, 6年前 , 4F
對方法一有什麼關卡嗎?還是它的結果不對?
11/10 18:57, 4F

11/10 18:59, 6年前 , 5F
隨機放NA的限制也應補充,例如限制欄內NA數?限制總NA數
11/10 18:59, 5F

11/10 19:00, 6年前 , 6F
還是都不限而單給定一個機率變NA?
11/10 19:00, 6F
法一結果是我想要的 是用sample從n個資料抓n/10個做為NA 所以NA個數是有設限的 您是這個意思嗎

11/10 19:46, 6年前 , 7F
是。方法一是限制總NA數。
11/10 19:46, 7F

11/10 19:47, 6年前 , 8F
如果這是你要的結果,那方法一已經很快了。
11/10 19:47, 8F

11/10 19:48, 6年前 , 9F
我唯一可以再挑的就是轉data frame再stack那段是多餘的
11/10 19:48, 9F

11/10 19:49, 6年前 , 10F
但其實並沒有額外增加多少運算時間,是可以接受的方法。
11/10 19:49, 10F
好的~ 非常感謝你的回覆!

11/11 17:51, 6年前 , 11F
隨機從亂數表裡面取值當作data frame的index賦值
11/11 17:51, 11F
就我所知 那樣會造成NA值之間的位置不獨立 如果已知[1,3]跟[5,7]是NA值 那[1,7]跟[5,3]也會是NA值 除非是用迴圈一個個跑,但那會是很差勁的作法 不知道我有沒有誤會您的意思?

11/13 22:55, 6年前 , 12F
轉成data.table用迴圈,每一個column做就好
11/13 22:55, 12F

11/13 22:55, 6年前 , 13F
數量可以每一個column隨機抽
11/13 22:55, 13F

11/13 22:56, 6年前 , 14F
用data.table的set,迴圈很快
11/13 22:56, 14F

11/13 23:00, 6年前 , 15F
好的,天神大大!我會試試看 看了您很多篇文,所以我自己也有去認識一下data.table 謝謝你的建議~ ※ 編輯: F0011010101 (163.13.118.176), 11/14/2017 16:32:07
文章代碼(AID): #1Q1NUzpo (R_Language)