随机矩阵,同时保持 NA 在 R 中的位置
Randomise matrix while keeping position of NAs in R
我有一个值矩阵,其中还包含 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 的位置与以前相同。有人知道这样做的简单方法吗?
非常感谢!
将其包装在 apply
中以仅随机化列
apply(X = df,
MARGIN = 2,
FUN = function(x) {
x[which(!is.na(x))] <- sample(x[which(!is.na(x))])
return(x)
})
我有一个值矩阵,其中还包含 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 的位置与以前相同。有人知道这样做的简单方法吗?
非常感谢!
将其包装在 apply
中以仅随机化列
apply(X = df,
MARGIN = 2,
FUN = function(x) {
x[which(!is.na(x))] <- sample(x[which(!is.na(x))])
return(x)
})