首页 > 解决方案 > 在R中如何填写没有出现在序列中的数字?

问题描述

我有一个数据集,其中列出了一组分数的百分位数,如下所示:

 > percentiles
    Score Percentile
1     231          0
2     385          1
3     403          2
4     413          3
5     418          4
6     424          5
7     429          6
8     434          7
9     437          8
10    441          9
11    443         10

我希望“分数”列从 100 到 500。也就是说,我希望分数 100 到 231 与百分位数 0 相关联,分数 232 到 385 与百分位数 1 相关联,等等。是有一种简单的方法可以填充“分数”值序列中未出现的值,使其看起来像下面的数据集?

> percentiles
    Score Percentile
1     100          0
2     101          0
3     102          0
4     103          0
5     104          0
6     105          0
7     106          0
8     107          0
9     108          0
10    109          0
--------------------
130   229          0
131   230          0
132   231          0
133   232          1
134   233          1
135   234          1
136   235          1
137   236          1
138   237          1
139   238          1
140   239          1


标签: rseq

解决方案


如果转换percentiles为 data.table,则可以对所有分数为 100:500 的新表进行滚动连接。滚动连接roll = -Inf本身会提供向后填充的行为,但 444:500 的值仍然是 NA ,因此nafill在最后添加了前向。

library(data.table)
setDT(percentiles)

percentiles[data.table(Score = 100:500), on = .(Score), roll = -Inf
            ][, Percentile := nafill(Percentile, 'locf')]


#      Score Percentile
#   1:   100          0
#   2:   101          0
#   3:   102          0
#   4:   103          0
#   5:   104          0
#  ---                 
# 397:   496         10
# 398:   497         10
# 399:   498         10
# 400:   499         10
# 401:   500         10

推荐阅读