【发布时间】:2020-05-10 07:15:47
【问题描述】:
我正在寻求一些帮助,以便将一些列添加到我似乎无法正确处理的数据框中。我的 df 大约是 40,000 行 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 个新列,一个用于序列 seq(0,1,0.1) 中的每个加权分位数。我正在使用以下余弦权重对来自上述 df 中列名 1:25 的观察结果进行加权。
cosine_weights <- 1 + cos(pi*seq(0,24)/24)
我可以通过在单行上使用 Hmisc 和 reldist 包中的 wtd.quantile() 函数来获取我正在寻找的值,但我似乎无法弄清楚如何正确使用 apply 函数将其应用于整个数据框的有用方法。请注意,其中一个问题是几行(如上面的第 1 行和第 4 行)包含列名 1:25 的所有 NA 值。对于这些行,我希望我的分位数也能产生 NA 值,但要为其他行产生有效的分位数。
这是我从每一行中寻找的输出示例,尽管我想将其作为新列附加到我现有的数据框中。我曾尝试将它与 mapply 一起使用,但一直遇到问题。我必须强制将数据作为数字来计算,但是当我尝试将其应用于完整的 df 时,它说我的(列表)对象不能被强制输入“double”。我尝试的每个修复似乎都失败了,并且我无法通过搜索找到任何其他类似的示例。
> Hmisc::wtd.quantile(as.numeric(dat[6, 3:27]), weights=cosine_weights, probs = seq(0,1,0.1))
0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
0.0 0.0 0.0 1.0 1.6 3.0 4.0 5.0 6.6 20.8 46.0
感谢您的帮助!
【问题讨论】:
标签: r sparse-matrix quantile mapply weighted