Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 忽略示例函数中的值或NAs_R_Matrix_Sample_Apply - Fatal编程技术网

R 忽略示例函数中的值或NAs

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

我在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    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)