r - 如何用以前的状态替换单个出现
问题描述
我有一个如下的数据表:
table=data.table(x=c(1:15),y=c(1,1,1,3,1,1,2,1,2,2,3,3,3,3,3),z=c(1:15)*3)
我必须清理这个数据表,其中有单个出现,例如 1 之间的 3 和 2 之间的 1。它不必是 3,但任何只出现一次的数字都应替换为前一个数字。
table=data.table(x=c(1:15),y=c(1,1,1,1,1,1,2,2,2,2,3,3,3,3,3),z=c(1:15)*3)
这是预期的数据表。
任何帮助表示赞赏。
解决方案
这是一种方法:
library(data.table)
#Count number of rows for each group
table[, N := .N, rleid(y)]
#Change `y` value which have only one row
table[, y := replace(y, N ==1, NA)]
#Replace NA with last non-NA value
table[, y := zoo::na.locf(y)][, N := NULL]
table
# x y z
# 1: 1 1 3
# 2: 2 1 6
# 3: 3 1 9
# 4: 4 1 12
# 5: 5 1 15
# 6: 6 1 18
# 7: 7 2 21
# 8: 8 2 24
# 9: 9 2 27
#10: 10 2 30
#11: 11 3 33
#12: 12 3 36
#13: 13 3 39
#14: 14 3 42
#15: 15 3 45
推荐阅读
- python - 如何在 Pandas 中删除固定数量的标记行?
- c++ - 将 C 库与 C++ dll 链接:“未解析的外部符号 __mingw_vsnprintf”
- javascript - 未在 Google Analytics 中使用 Next.js 设置页面标题
- java - 类似于扫雷游戏的回溯递归,二维布尔数组
- google-apps-script - Google Doc 评论 - 使用 Appscript 更新
- thymeleaf - Vert.x TemplateHandler (with ThymeleafTemplateEngine) 使用问题
- scikit-learn - 在处理 MNIST 的数字识别集时,我应该如何调整我的神经网络的隐藏层?
- socket.io - Flask-SocketIO:无法连接到命名空间
- sparql - 使用 sparql 清除 rdf4j 中的内部字符串缓存
- python - 类中的属性错误 - python - on pycharm