我有一种情况需要重新格式化数据框,其中每行包含一个ID值,三年(存储在列中)和三个预测(存储在列中)。如果未使用年份或预测,则它包含虚拟值(-9999)。
以下是一个示例数据框:
# Example initial dataframe
sample = data.frame(
id = c(1,2,3),
year1 = c(2005, 2005, 2005),
year2 = c(2009, 2010, 2010),
year3 = c(2010, -9999, -9999),
pred1 = c(0, 0, 0),
pred2 = c(0, 1, 0),
pred3 = c(1, -9999, -9999)
)
我的目标是有效地将数据格式重新格式化为每行包含ID,当前年份和预测(1/0)的数据框:
以下代码演示了所需的输出数据帧:
# Code produces desired output format
desired_format = data.frame(
id = rep(1:3, each=6),
year = rep(seq(2005, 2010, 1), 3),
pred = c(c(0,0,0,0,0,1), c(0,1,1,1,1,1), c(0,0,0,0,0,0))
)
以下是我的R控制台所需格式的屏幕截图。
我通过for循环以相当精细的方式来实现这一点。但是,我一直无法提出基于dplyr或其他基于数据管理库的解决方案,以便为将来查找我的代码的任何人提供更高效和更易维护的重新格式化。