如何在R中独立对矩阵各列使用ties='first'进行排名?
解决R语言中矩阵按列独立使用
ties='first'排名的问题 嘿,我懂你碰到的困扰啦!直接对矩阵调用rank()函数时,R会自动把整个矩阵扁平化变成一维向量来计算排名,而不是按每一列单独处理,这就是为什么你没得到预期的按列排名结果。
正确的实现方法
我们可以用apply()函数来指定按列操作,把rank()函数应用到矩阵的每一列上,同时指定ties.method='first'参数(注:ties是ties.method的简写,两种写法都能生效,但写完整参数名更清晰哦)。
修改后的代码如下:
# 创建示例矩阵 mat <- matrix(c(10,5,15,4,3,200,150,4,75,80,25,30,16,57,15,45),ncol=4) mat # 按列独立排名,使用ties='first' ranked_mat <- apply(mat, MARGIN = 2, function(x) rank(x, ties.method = 'first')) ranked_mat
代码解释
apply(mat, MARGIN = 2, ...):MARGIN=2表示我们要对矩阵的列进行操作(如果是MARGIN=1则是对行操作)。- 匿名函数
function(x) rank(x, ties.method = 'first'):这里的x代表矩阵的每一列,我们对每一列单独调用rank()函数,并指定ties.method='first'来处理重复值——重复值会按照它们在列中出现的先后顺序分配排名。
输出验证
运行上述代码后,你会得到一个和原矩阵维度相同的新矩阵,其中每一列都是对应原列的独立排名结果。比如原矩阵第一列[10,5,15,4]的排名会是[3,2,4,1],完全符合按列独立排名的预期。
内容的提问来源于stack exchange,提问作者panda86
相关产品推荐
相关产品推荐

