如何根据R中其他两个列的值组合更改列值?

我有30万个人(身份证)的面板数据。每个ID每年(2013-2016)有1行。基于“代码”,确定“名称”的状态(每年)。但是,仍然存在一些错误。如果数据框中的一个ID在特定年份具有特定名称,我想给每个人提供相同的代号和年份,也要为每个名称赋予相同的代号和年份。如果没有人在名称中指定特定代码和年份的名称,那么NA就足够了。这有点棘手,因为ID可以在多年内(而不是一年内)通过Codes进行切换。

例如:对于ID#2,2014年的名称应从NA更改为PIZZA,原因是数据框中的另一个ID(此处为#1)具有相同的代码和年份的“ PIZZA”。但是,ID#3和ID#4在2016年都保持不变,因为没有人使用代码05/1234和Year 2016在数据框中具有名称。

    > str(Poging23)
tibble [16 x 5] (S3: tbl_df/tbl/data.frame)
 $ ID           : num [1:16] 1 1 1 1 2 2 2 2 3 3 ...
 $ Date_of_birth: POSIXct[1:16], format: "2000-05-25" "2000-05-25" "2000-05-25" "2000-05-25" ...
 $ Code         : chr [1:16] "01/1234" "01/1234" "01/1234" "01/1234" ...
 $ Year         : num [1:16] 2013 2014 2015 2016 2013 ...
 $ Name         : chr [1:16] "PIZZA" "PIZZA" "NA" "NA" ...

> dput(Poging23)
structure(list(ID = c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 
4, 4, 4), Date_of_birth = structure(c(959212800, 959212800, 959212800, 
959212800, 25315200, 25315200, 25315200, 25315200, 277862400, 
277862400, 277862400, 277862400, 1267574400, 1267574400, 1267574400, 
1267574400), class = c("POSIXct", "POSIXt"), tzone = "UTC"), 
    Code = c("01/1234", "01/1234", "01/1234", "01/1234", "01/1234", 
    "01/1234", "01/1234", "01/1234", "01/1234", "01/1234", "05/1234", 
    "05/1234", "05/1234", "05/1234", "05/1234", "05/1234"), Year = c(2013, 
    2014, 2015, 2016, 2013, 2014, 2015, 2016, 2013, 2014, 2015, 
    2016, 2013, 2014, 2015, 2016), Name = c("PIZZA", "PIZZA", 
    "NA", "NA", "NA", "NA", "PIZZA", "NA", "NA", "PIZZA", "NA", 
    "NA", "PASTA", "PASTA", "PASTA", "NA")), row.names = c(NA, 
-16L), class = c("tbl_df", "tbl", "data.frame"))

不幸的是,这些代码无法正常工作(多年来没有考虑代码的更改):如何根据R中其他ID的单元格值/特征将ID的NA更改为字符值?

也可以将所有名称更改为1,如果更容易将NA更改为0。

希望有人可以帮助我/给出提示!

谢谢!