我有一个数据集PCD,其中包含用于校对的论文,版本,发布日期和虚拟变量。
PCD <- read.table(text = "
Paper Version Week Major_version Proofread
YYYYY 1.0 201405 1 1
YYYYY 1.1 201407 1 0
YYYYY 2.0 201436 2 0
YYYYY 2.1 201439 2 1
YYYYY 2.2 201449 2 0
ZZZZZ 3.4 201350 3 0
ZZZZZ 3.5 201510 3 0
XXXXX 1.0 201723 1 0
XXXXX 1.1 201748 1 1
XXXXX 1.2 201750 1 1
XXXXX 2.0 201810 2 0
XXXXX 2.1 201815 2 0
XXXXX 2.2 201817 2 1
XXXXX 2.3 201825 2 0
QQQQQ 2.0 201605 2 1
QQQQQ 3.0 201610 3 1
", header = TRUE, stringsAsFactors = FALSE)
如果在某些时候主要版本被校对并且收到了一个小的更新,我想保留校对版本的假人,直到该论文的主要版本更改为更新的版本。所以期望的输出就是这个。
Paper Version Week Major_version Proofread
YYYYY 1.0 201405 1 1
YYYYY 1.1 201407 1 1
YYYYY 2.0 201436 2 0
YYYYY 2.1 201439 2 1
YYYYY 2.2 201449 2 1
ZZZZZ 3.4 201350 3 0
ZZZZZ 3.5 201510 3 0
XXXXX 1.0 201723 1 0
XXXXX 1.1 201748 1 1
XXXXX 1.2 201750 1 1
XXXXX 2.0 201810 2 0
XXXXX 2.1 201815 2 0
XXXXX 2.2 201817 2 1
XXXXX 2.3 201825 2 1
QQQQQ 2.0 201605 2 1
QQQQQ 3.0 201610 3 1
我认为像
这样的东西PCD %>% group_by(Paper, Major_version)
将是一个很好的起点,但我不知道接下来该做什么。
答案 0 :(得分:1)
假设您要使用“dplyr”软件包,这里有一个代码可以满足您的需求:
PCD %>%
arrange(Paper, Version) %>%
group_by(Paper, Major_version) %>%
mutate(Proofread = 1 * (cumsum(Proofread) >= 1 ))
这个想法是在每个子组中使用cumsum()来检查逻辑测试到目前为止是否有任何校对。其余的是不言自明的。
如果您的data.frame在您的示例中排序良好,则第二行不是必需的,但应该为您节省一些麻烦......