[问题] 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