考虑以下数据集:
问题在于我的真实数据集要大得多(102000 x 270),变量也更多。真实数据也更加不规则,缺失值也更多。使用
有没有更快的简单方法可以做到这一点?我觉得R中一定有一些函数可以进行这种操作,但我找不到任何信息。
> DATA <- data.frame(Agreement_number = c(1,1,1,1,2,2,2,2),
+ country = c("Canada","Canada", "USA", "USA", "Canada","Canada", "USA", "USA"),
+ action = c("signature", "ratification","signature", "ratification", "signature", "ratification","signature", "ratification"),
+ signature_date = c(2000,NA,2000,NA, 2001, NA, 2002, NA),
+ ratification_date = c(NA, 2001, NA, 2002, NA, 2001, NA, 2002))
> DATA
Agreement_number country action signature_date ratification_date
1 Canada signature 2000 NA
1 Canada ratification NA 2001
1 USA signature 2000 NA
1 USA ratification NA 2002
2 Canada signature 2001 NA
2 Canada ratification NA 2001
2 USA signature 2002 NA
2 USA ratification NA 2002
正如您所看到的,一半的行信息是重复的。对于像这样小的数据集,很容易删除重复项。我可以使用coalesce
函数(dplyr包),去除"action"列,然后删除所有不相关的行。当然,还有很多其他方法。最终结果应该像这样:
> DATA <- data.frame( Agreement_number = c(1,1,2,2),
+ country = c("Canada", "USA", "Canada","USA"),
+ signature_date = c(2000,2000,2001,2002),
+ ratification_date = c(2001, 2002, 2001, 2002))
> DATA
Agreement_number country signature_date ratification_date
1 Canada 2000 2001
1 USA 2000 2002
2 Canada 2001 2001
2 USA 2002 2002
问题在于我的真实数据集要大得多(102000 x 270),变量也更多。真实数据也更加不规则,缺失值也更多。使用
coalesce
函数速度非常慢。到目前为止,我能够做到的最好的循环仍然需要5-10分钟才能运行。有没有更快的简单方法可以做到这一点?我觉得R中一定有一些函数可以进行这种操作,但我找不到任何信息。