求矩阵行中位数和绝对偏差
|
我有一个22239行和200列的数据框。第一列“ѭ0”是一个字符,其他列是数字。我的目标是通过以下方式对行的所有元素进行操作:
查找行的中位数;
从行元素(值)中减去中位数;
查找各行的中位数绝对偏差(疯狂);
疯狂地将行元素除以行。
我这样尝试
edata <- read.delim(\"a.txt\", header=TRUE, sep=\"\\t\")
## Converting dataframe into Matrix
## Taking all rows but starting from 2 column to 200
data <- as.matrix(edata[,2:200])
for(i in 1:22239){ #rows below columns
for(j in 1:200) {
m <- median(data[i,]) # median of rows
md <- mad(normdata[i,]) # mad of rows
a <- data[i,j] # assigning matrix element value to a
subs = a-m # substracting
escore <- subs/md # final score
data[i,j] <- escore # assigning final score to row elements
在为行的每个元素获取新值之后,我想根据NAME列根据75%的分位数对它进行排序。但是,我不确定该怎么做。
我知道我的代码不是高效的内存。当我运行上面的代码时,循环非常慢。尝试了foreach
,但未能成功。你们能建议我解决此类问题的好方法吗?
没有找到相关结果
已邀请:
5 个回复
娠频摩
来说是一项理想的工作。
不使用ѭ5可以加快速度,因为它会再次计算中位数:
请注意,R \的a5 a乘以常数1.4826以实现渐近法线一致性,因此,第二个示例中的额外位。 我的系统上的一些时间安排:
对于@Nick \'s Answer,我得到:
始终比我的第一个版本快,但比第二个版本慢,这再次是因为中值被计算了两次。
完趣镐
我敢肯定还有更好的方法,但是HTH。
场竟矩喘崩
类似的方法可以用于其他措施。请记住,在R / matlab中避免for循环通常会加快代码的速度。
担每棱绰
习让休堂溯