【问题标题】:Randomise matrix while keeping position of NAs in R随机矩阵,同时保持 NA 在 R 中的位置
【发布时间】:2018-02-22 22:13:56
【问题描述】:

我有一个值矩阵,其中还包含以下 NA:

> matrix(rexp(200), 10)
> df[ df < 0.5 ] <- NA

> df
         [,1]      [,2]      [,3]      [,4]     [,5]
[1,] 2.124043 1.6119230        NA 0.7222127 1.400924
[2,] 4.143728        NA        NA 1.0343577       NA
[3,] 2.395984 0.6794447 0.8327695 1.0258656       NA
[4,]       NA        NA        NA        NA 1.421674
[5,]       NA 1.0446031 0.7762776        NA       NA

我想打乱矩阵中的每一列,并意识到我可以这样做:

> df<- df[sample(nrow(df)),] 

> df
         [,1]      [,2]      [,3]      [,4]     [,5]
[1,] 2.395984 0.6794447 0.8327695 1.0258656       NA
[2,] 2.124043 1.6119230        NA 0.7222127 1.400924
[3,]       NA        NA        NA        NA 1.421674
[4,] 4.143728        NA        NA 1.0343577       NA
[5,]       NA 1.0446031 0.7762776        NA       NA

但是,我想以这种方式随机化,同时保持 NA 的位置与以前相同。有人知道这样做的简单方法吗?

非常感谢!

【问题讨论】:

    标签: r matrix na


    【解决方案1】:

    将其包装在 apply 中以仅随机化列

    apply(X = df,
          MARGIN = 2,
          FUN = function(x) {
                             x[which(!is.na(x))] <- sample(x[which(!is.na(x))])
                             return(x)
                            })
    

    【讨论】:

    • 您可以省略which,因为is.na 已经返回了一个逻辑向量,并且您对NAs 没有任何问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多