【问题标题】:Sample without the NAs没有 NA 的样本
【发布时间】:2016-07-16 03:22:55
【问题描述】:

这个问题与stackoverflow下一页中提出的问题有关:Ignoring values or NAs in the sample function

问题:我有一个矩阵 K(比如 1528)行和许多(比如 1000)列。许多条目中都有 NA。从每一列中,我想按以下方式采样 40 个元素:如果列中此类元素的总数不少于 40,我从非 NA 元素中随机抽样。如果它们小于 40(比如=k),则将是所有 k 个元素和 40-k 个 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)

在第四行,它在重复中显示无效的“次”参数。任何人都可以使代码可行(我想包括 NA,因为我想从中生成一个 40X1000 矩阵)

【问题讨论】:

  • 对不起:我自己找到了答案:mysample 1488){ return(c(x[!is.na(x) )],rep(NA,40))[1:40]) } return(sample(x[!is.na(x)],40)) } J=apply(K, 2, mysample) 感谢所有以前论坛里的讨论。我的代码是它们的直接扩展

标签: r


【解决方案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)

【讨论】:

  • 非常感谢 Psidom,我会检查一下
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-04
  • 2018-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-10
相关资源
最近更新 更多