2016-07-16 50 views
0

这个问题是安静的相关问题在计算器的以下页面问:Ignoring values or NAs in the sample function样品没有在NAS

问:我有一个矩阵K(比如1528)行,许多人(比如1000)列。许多参赛作品都有新生报到。从每一列中,我想以下面的方式对40个元素进行采样:如果列中这些元素的总数不小于40,我从非NA元素中随机采样。如果它们小于40(比如= k),那么将是所有k个元素和40k个NA。我试过以下代码:

mysample <- function(x){ 
    if(sum(is.na(x))>1488){ 
    sum(x[!is.na(x)]) 
    return(c(x[!is.na(x)],rep(NA,40-sum(x[!is.na(x)])))) 
    } 
    return(sample(x[!is.na(x)],40)) 
} 

J=apply(K, 2, mysample) 

在第四行中,它显示重复中的无效'times'参数。任何人都可以使代码可行的(我想包括在NAS,因为我想产生40X1000矩阵出来的)

+0

对不起:找到自己的答案:MYSAMPLE < - 函数(X){ 如果(SUM(is.na(X))> 1488) (x [!is.na(x)],(rep [NA],40))[1:40]) } return ) } J = apply(K,2,mysample) 感谢论坛上的所有讨论。我的代码是他们的直接扩展 –

回答

1

在你rep功能,时间参数应为40 - length_of_nona这应该是40 - sum(!is.na(x))。没有测试,但我认为这将解决这个问题:

mysample <- function(x){ 
    if(sum(is.na(x))>1488){ 
    # sum(x[!is.na(x)]) 
    return(c(x[!is.na(x)],rep(NA,40-sum(!is.na(x))))) 
             ^ ^
    } 
    return(sample(x[!is.na(x)],40)) 
} 

J=apply(K, 2, mysample) 
+0

非常感谢Psidom,我会检查它 –