R 忽略示例函数中的值或NAs
我在R中有一个矩阵,我想从每一行中随机抽取一个样本。我的一些数据是NA格式的,但在随机抽样时,我不希望NA成为抽样的选项。我将如何做到这一点 比如说,R 忽略示例函数中的值或NAs,r,matrix,sample,apply,R,Matrix,Sample,Apply,我在R中有一个矩阵,我想从每一行中随机抽取一个样本。我的一些数据是NA格式的,但在随机抽样时,我不希望NA成为抽样的选项。我将如何做到这一点 比如说, a <- matrix (c(rep(5, 10), rep(10, 10), rep(NA, 5)), ncol=5, nrow=5) a [,1] [,2] [,3] [,4] [,5] [1,] 5 5 10 10 NA [2,] 5 5 10 10 NA [3,] 5
a <- matrix (c(rep(5, 10), rep(10, 10), rep(NA, 5)), ncol=5, nrow=5)
a
[,1] [,2] [,3] [,4] [,5]
[1,] 5 5 10 10 NA
[2,] 5 5 10 10 NA
[3,] 5 5 10 10 NA
[4,] 5 5 10 10 NA
[5,] 5 5 10 10 NA
可能有更好的方法,但示例似乎并没有任何和NAs相关的参数,所以我只编写了一个匿名函数来处理NAs
apply(a, 1, function(x){sample(x[!is.na(x)], size = 1)})
基本上你想做什么就做什么。如果你真的想要矩阵输出,你可以这样做
b <- matrix(apply(a, 1, function(x){sample(x[!is.na(x)], size = 1)}), ncol = 1)
b我认为@Dason的解决方案非常有效,但您也可以尝试以下方法:
a <- matrix (c(rep(5, 10), rep(10, 10), rep(NA, 5)), ncol=5, nrow=5)
matrix(sample(na.omit(as.numeric(a)),ncol(a)))
[,1]
[1,] 10
[2,] 5
[3,] 10
[4,] 10
[5,] 5
a尝试了上面的一些解决方案,但由于某种原因,我一直出现以下错误:
Error in sample.int(length(x), size, replace, prob):
invalid first argument
这段代码(使用sample\n
(来自dplyr
)和)工作起来就像一个符咒,非常简单,IMHO:
sample_n(df[complete.cases(df), ], n)
是的,我注意到了失败。我从中获取样本,并使用它生成更多的复制品,从中获取更多样本。我做了个变通,但你的解决方案比我的好。
a <- matrix (c(rep(5, 10), rep(10, 10), rep(NA, 5)), ncol=5, nrow=5)
matrix(sample(na.omit(as.numeric(a)),ncol(a)))
[,1]
[1,] 10
[2,] 5
[3,] 10
[4,] 10
[5,] 5
set.seed(007)
a <- matrix(sample(1:100, 25), 5)
a[1,] <- NA
a[5,1] <- NA
a[,3] <- NA
a[5,5] <- NA
a[3,2] <- NA
matrix(sample(na.omit(as.numeric(a)),ncol(a)))
[,1]
[1,] 40
[2,] 1
[3,] 42
[4,] 26
[5,] 32
Error in sample.int(length(x), size, replace, prob):
invalid first argument
sample_n(df[complete.cases(df), ], n)