【发布时间】:2018-01-07 16:35:29
【问题描述】:
考虑这个数据集:
> 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 package),去掉“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中一定有这种操作的函数,但是我找不到。
【问题讨论】:
-
欢迎来到 Stack Overflow!我对您的问题进行了一些编辑,以提高清晰度,以帮助您获得答案。祝你好运!
-
感谢大家的回答!我实际上在我的代码中早先解决了这个问题,但我受到了你的回答的启发。
标签: r dataframe large-data