簡體   English   中英

如何用R中的NA替換關系

[英]How to replace ties with NA in R

我正在使用一個函數來為每一行返回最大值的列名。 就像是:

colnames(x)[apply(x,1,which.max)]

但是,在應用類似這樣的功能之前,是否存在一種直接且通用的方法用NA(或任何其他任意字母等)替換關系?

我有以下矩陣:

               0            1
 [1,] 5.000000e-01 0.5000000000
 [2,] 9.901501e-01 0.0098498779
 [3,] 9.981358e-01 0.0018641935
 [4,] 9.996753e-01 0.0003246823
 [5,] 9.998598e-01 0.0001402322
 [6,] 1.303731e-02 0.9869626938
 [7,] 1.157919e-03 0.9988420815
 [8,] 6.274074e-07 0.9999993726
 [9,] 1.659164e-07 0.9999998341
[10,] 6.517362e-08 0.9999999348
[11,] 8.951474e-06 0.9999910485
[12,] 5.070740e-06 0.9999949293
[13,] 1.278186e-07 0.9999998722
[14,] 9.914646e-08 0.9999999009
[15,] 7.058751e-08 0.9999999294
[16,] 2.847667e-09 0.9999999972
[17,] 1.675766e-08 0.9999999832
[18,] 2.172290e-06 0.9999978277
[19,] 4.964820e-06 0.9999950352
[20,] 1.333680e-07 0.9999998666
[21,] 2.087793e-07 0.9999997912
[22,] 2.358360e-06 0.9999976416

第一行的變量值相等,我想用NA代替。 盡管對於這個特定示例來說這很簡單,但我希望能夠將用任何大小矩陣(即在此矩陣中)出現的所有關系替換為NA:

      1     2    3
[1,]  0.25  0.25  0.5
[2,]  0.3   0.3   0.3

除[1,3]外,所有值均將替換為NA

我看過函數which.max.simple()可以通過用NA替換來處理聯系,但似乎不再起作用,並且所有其他處理聯系的方法都無法解決我的問題

我希望這是有道理的

謝謝,C

這是一種簡單的方法,用矩陣m NA替換任何按行重復的值:

is.na(m) <- t(apply(m, 1, FUN = function(x) {
               duplicated(x) | duplicated(x, fromLast = TRUE)}))

但是請考慮以下注意事項:

1)在比較浮點數是否相等時要格外小心(請參閱為什么這些數字不相等? );

2)根據最終目標,可能有比替換數據中重復項更簡單的方法(因為似乎您僅對列名感興趣);

3)如果要替換數字矩陣中的值,請不要使用任意字符進行替換,因為這會將整個矩陣轉換為字符類(用NA替換不是問題)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM