r - 将第二次出现在 R 的列中

标签 r conditional subset find-occurrences

我有一个非常简单的数据集:

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/

相关文章:

arrays - r 子集数组使用向量

mysql - MySql搜索作为给定集合的子集的集合

python - 所有子集的集合

r - 如何获取不同长度列表中项目的频率

包含数千列的 R fread 文件,在前 10 列之后连接

jquery - 如果其他 div 展开 ("slid open",则不要切换滑动 div)

c - if(i-2) 在 C 语言中是什么意思?

java - 用设计模式替换多个 If\Else

r - 变量名顺序pivot_wider

r - 拟合到 ARIMA 模型的时间序列的方差