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

将R中的非montone数据转换为单调数据,r,R,我有一个数据框,其中包含同一主题随时间的重复测量。我想找到一种简单的方法,将这些数据从非单调缺失转换为单调缺失 e、 ID1是单调的:1,不,不,不 ID3是非单调的:0,NA,0,0 ID4是非单调的: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,

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

e、 ID1是单调的:1,不,不,不 ID3是非单调的:0,NA,0,0 ID4是非单调的: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))
您可以尝试:

df$newcol<-ave(df$Y,df$id,FUN=function(x) NA^is.na(cumsum(x))*x)
#   id  Y X t newcol
#1   1  1 5 1      1
#2   2  1 6 1      1
#3   3  0 7 1      0
#4   4  1 8 1      1
#5   1 NA 3 2     NA
#6   2  1 5 2      1
#7   3 NA 6 2     NA
#8   4  1 7 2      1
#9   1 NA 8 3     NA
#10  2  1 9 3      1
#11  3  0 1 3     NA
#12  4 NA 2 3     NA
#13  1 NA 3 4     NA
#14  2  0 4 4      0
#15  3  0 5 4     NA
#16  4  1 6 4     NA

df$newcol您可以使用
is.na加1。您还可以使用
replace
使其成为一个单行程序:
replace(x,is.na(cumsum(x)),na)
只要您根据id和时间对数据帧进行排序,那么这两个都可以工作+1.
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