R 如何从稀疏填充的数据帧中获取加权分位数?

R 如何从稀疏填充的数据帧中获取加权分位数?,r,sparse-matrix,quantile,mapply,weighted,R,Sparse Matrix,Quantile,Mapply,Weighted,我正在寻找一些帮助,向数据框中添加一些我似乎不太正确的列。我的df大约为40000行x 30列,结构如下: Key 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 NumNotNA 317862 2151 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA

我正在寻找一些帮助,向数据框中添加一些我似乎不太正确的列。我的df大约为40000行x 30列,结构如下:

Key       0  1  2  3  4  5  6  7  8  9 10  11 12 13 14  15 16  17  18  19 20  21 22 23 24 25  NumNotNA
317862 2151 NA NA NA NA NA NA NA NA NA NA  NA NA NA NA  NA NA  NA  NA  NA NA  NA NA NA NA NA         0
317881 1105 51 33 98  8 27 56 28 17 39 11 112 14 87  7 273 56 189 245 119  7 147 25 NA NA NA        22
290507  111 56 28 NA NA NA NA NA NA NA NA  NA NA NA NA  NA NA  NA  NA  NA NA  NA NA NA NA NA         2
290509  196 NA NA NA NA NA NA NA NA NA NA  NA NA NA NA  NA NA  NA  NA  NA NA  NA NA NA NA NA         0
290520   91  0  2  1  4  1  1  0  0  0  1   1  4  0  1   0  5   0   1   0  1   0  0  4  1  0        25
290521   92  2  5 22  3  4  1 19  0  5  0   1 13  0  0   0  1   0   0   1  1   0 46 15  0  1        25
我希望在数据框中添加11个新列,序列seq0,1,0.1中的每个加权分位数对应一个列。我使用以下余弦权重对上述df中的列名1:25的观测值进行加权

cosine_weights <- 1 + cos(pi*seq(0,24)/24)

谢谢你的帮助

我们可以编写一个函数来计算所需的值

calculate_quantile <- function(x) {
   if (all(is.na(x))) return(rep(NA, 11))
   as.numeric(Hmisc::wtd.quantile(x, weights=cosine_weights, probs = seq(0,1,0.1)))
}
calculate_quantile <- function(x) {
   if (all(is.na(x))) return(rep(NA, 11))
   as.numeric(Hmisc::wtd.quantile(x, weights=cosine_weights, probs = seq(0,1,0.1)))
}
dat[paste0('Q', 1:11)] <- t(apply(dat[3:27], 1, calculate_quantile))