我有一个非常简单的数据集:
ID Value Time
1 censored 1
1 censored 2
1 uncensored 3
1 uncensored 4
1 censored 5
1 censored 6
2 censored 1
2 uncensored 2
2 uncensored 3
2 uncensored 4
2 censored 5
我想保留第一个
uncensored
出现,并且我想在 censored
之后保留第一个 uncensored
出现。例如:ID Value Time
1 uncensored 3
1 censored 5
2 uncensored 2
2 censored 5
不是每个人在时间 5 都有他们的第一个审查日期,这只是一个例子。
Value
是一个二进制变量:1 表示已审查,0 表示未审查,但我已经标记了它们。
最佳答案
这是另一个可能的 data.table
解决方案
library(data.table)
setDT(df1)[, list(Value = c("uncensored", "censored"),
Time = c(Time[match("uncensored", Value)],
Time[(.N - match("uncensored", rev(Value))) + 2L])),
by = ID]
# ID Value Time
# 1: 1 uncensored 3
# 2: 1 censored 5
# 3: 2 uncensored 2
# 4: 2 censored 5
或者类似地,使用
which
而不是 match
setDT(df1)[, list(Value = c("uncensored", "censored"),
Time = c(Time[which(Value == "uncensored")[1L]],
Time[(.N - which(rev(Value) == "uncensored")[1L]) + 2L])),
by = ID]
关于r - 将第二次出现在 R 的列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30975927/