从矩阵R中的多个列中删除随机n%元素

时间:2018-02-21 02:02:18

标签: r

我有一个nXm矩阵:500x31。我想从第一列中删除20%的元素,从第二列中删除15%,从第三列中删除10%。删除哪些元素并不重要,但知道如何删除随机元素会很好。有什么建议?

1 个答案:

答案 0 :(得分:3)

这是一种方法,您可以指定应转换为NA的比例(这是我理解您的目标)。请注意,我将问题中的“删除”解释为“替换为NA”(如果您实际删除它们,结果将不再是矩阵)。

# create some fake data 
n_rows <- 500
n_cols <- 31
dat <- matrix(data=rnorm(n_rows*n_cols), nrow=n_rows, ncol=n_cols)

# write a function to replace `prop_na` proportion of a column's values with NA
values_to_na <- function(x, prop_na){
  n_na <- prop_na * length(x)
  # use `sample()` to select `n_na` random elements
  x[sample(1:length(x), size=n_na)] <- NA  
  return(x)
}

# then apply the func to each column, with desired proportion of NA's
dat[, 1] <- values_to_na(dat[, 1], prop_na=.2)
dat[, 2] <- values_to_na(dat[, 2], prop_na=.15)
# and so on...

如果您只想计算列的非NA元素(例如,列1),那么您可以使用dat[!is.na(dat[, 1]), 1]

来引用它们