基于三个变量更新虚拟变量

时间:2018-06-18 11:36:13

标签: r

我有一个数据集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) 

将是一个很好的起点,但我不知道接下来该做什么。

1 个答案:

答案 0 :(得分:1)

假设您要使用“dplyr”软件包,这里有一个代码可以满足您的需求:

PCD %>% 
  arrange(Paper, Version) %>%
  group_by(Paper, Major_version) %>% 
  mutate(Proofread = 1 * (cumsum(Proofread) >= 1 ))

这个想法是在每个子组中使用cumsum()来检查逻辑测试到目前为止是否有任何校对。其余的是不言自明的。

如果您的data.frame在您的示例中排序良好,则第二行不是必需的,但应该为您节省一些麻烦......