[問題] dataframe資料隨機賦值
[問題類型]:
程式諮詢(我想用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
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
11/10 18:59, 5F
→
11/10 19:00,
6年前
, 6F
11/10 19:00, 6F
法一結果是我想要的
是用sample從n個資料抓n/10個做為NA 所以NA個數是有設限的 您是這個意思嗎
→
11/10 19:46,
6年前
, 7F
11/10 19:46, 7F
→
11/10 19:47,
6年前
, 8F
11/10 19:47, 8F
→
11/10 19:48,
6年前
, 9F
11/10 19:48, 9F
→
11/10 19:49,
6年前
, 10F
11/10 19:49, 10F
好的~ 非常感謝你的回覆!
推
11/11 17:51,
6年前
, 11F
11/11 17:51, 11F
就我所知 那樣會造成NA值之間的位置不獨立
如果已知[1,3]跟[5,7]是NA值 那[1,7]跟[5,3]也會是NA值
除非是用迴圈一個個跑,但那會是很差勁的作法
不知道我有沒有誤會您的意思?
→
11/13 22:55,
6年前
, 12F
11/13 22:55, 12F
→
11/13 22:55,
6年前
, 13F
11/13 22:55, 13F
→
11/13 22:56,
6年前
, 14F
11/13 22:56, 14F
→
11/13 23:00,
6年前
, 15F
11/13 23:00, 15F
好的,天神大大!我會試試看
看了您很多篇文,所以我自己也有去認識一下data.table
謝謝你的建議~
※ 編輯: F0011010101 (163.13.118.176), 11/14/2017 16:32:07