r - 将非单调数据转换为 R 中的单调数据

标签 r

我有一个数据框,其中包含同一主题随时间的重复测量。我想找到一种将这些数据从非单调缺失转换为单调缺失的简单方法。

例如id 1 是单调的:1,NA,NA,NA id 3 是非单调的:0,NA,0,0 id 4 是非单调的:1,1,NA,1

我希望 id=3 为 Y=c(0,NA,NA,NA),id=4 为 Y=c(1,1,NA,NA)。

建议?

包含玩具数据集:

 df=structure(list(id = c(1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 
3L, 4L, 1L, 2L, 3L, 4L), Y = c(1L, 1L, 0L, 1L, NA, 1L, NA, 1L, 
NA, 1L, 0L, NA, NA, 0L, 0L, 1L), X = c(5L, 6L, 7L, 8L, 3L, 5L, 
6L, 7L, 8L, 9L, 1L, 2L, 3L, 4L, 5L, 6L), t = c(1L, 1L, 1L, 1L, 
2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L)), .Names = c("id", 
"Y", "X", "t"), class = "data.frame", row.names = c(NA, -16L))

最佳答案

您可以使用 is.na <-cumsum传播 NA值(value)观:

df <- within(df, Y <- ave(Y, id, FUN = function(x) {
  is.na(x) <- is.na(cumsum(x))
  x
}))

df[order(df$id),]
#    id  Y X t
# 1   1  1 5 1
# 5   1 NA 3 2
# 9   1 NA 8 3
# 13  1 NA 3 4
# 2   2  1 6 1
# 6   2  1 5 2
# 10  2  1 9 3
# 14  2  0 4 4
# 3   3  0 7 1
# 7   3 NA 6 2
# 11  3 NA 1 3
# 15  3 NA 5 4
# 4   4  1 8 1
# 8   4  1 7 2
# 12  4 NA 2 3
# 16  4 NA 6 4

关于r - 将非单调数据转换为 R 中的单调数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34290771/

相关文章:

r - 如何在 R Markdown 文档中指定默认书目 LaTeX/BibTeX 引用样式 "plain"或 "unsrt"?

r - 假设检验R中的偏度和/或峰度

rCharts rNVD3 工具提示自定义

r - 尝试使用 R 中的窗口函数

r - 将字符串分成多列

带有离散色标的光栅图,用于负值和正值 R

r - 使用循环在 r 中创建包含 ICC 结果的表

r - 为什么 `options(digits=3)` 在 `knitr' 中被忽略?

r - 将文本添加到 R 中的水平条形图,y 轴以不同的比例?

r - 使用 R 包 extrafont 生成错误 "font width unknown for character 0x48"