【发布时间】:2020-12-18 13:09:27
【问题描述】:
一个数据框有 3 列
-----------------------------------------
| Id | Country | Date |
-----------------------------------------
3栏记录人的旅行历史。
需要再创建 3 列来表示此人 (ID)在该行日期之前之前最常前往的前 3 个国家/地区。
(如果 2 个国家出现并列,则以最近旅行的国家为准。)
mydata <- data.frame(ID = c('A1B1', 'A1B1', 'A1B1', 'A1B1', 'A1B1', 'A1B1', 'A1B1', 'A1B1', 'A2B2', 'A2B2', 'A2B2', 'A2B2', 'A2B2', 'A2B2'),
Country = c('Japan', 'USA', 'USA', 'USA', 'Germany', 'Germany', 'Japan', 'France', 'UK', 'Spain', 'Spain', 'UK', 'UK', 'Brazil'),
Date = as.Date(c('2010/01/02', '2010/04/18', '2011/03/22', '2011/11/23', '2012/05/09', '2012/09/11', '2014/01/06', '2015/12/11', '2010/04/03', '2010/05/11', '2011/05/01', '2012/03/01', '2013/01/03', '2014/01/04')))
# final data should look like below
#ID Country Date Pref1 Pref2 Pref3
#A1B1 Japan 2010-01-02 NA NA NA
#A1B1 USA 2010-04-18 Japan NA NA
#A1B1 USA 2011-03-22 USA Japan NA
#A1B1 USA 2011-11-23 USA Japan NA
#A1B1 Germany 2012-05-09 USA Japan NA
#A1B1 Germany 2012-09-11 USA Germany Japan
#A1B1 Japan 2014-01-06 USA Germany Japan
#A1B1 France 2015-12-11 USA Japan Germany
#A2B2 UK 2010-04-03 NA NA NA
#A2B2 Spain 2010-05-11 UK NA NA
#A2B2 Spain 2011-05-01 Spain UK NA
#A2B2 UK 2012-03-01 Spain UK NA
#A2B2 UK 2013-01-03 UK Spain NA
#A2B2 Brazil 2014-01-04 UK Spain NA
问。如何创建最后 3 列以按 ID 滚动前 3 个国家/地区?
【问题讨论】:
-
你能检查输出以确保它是正确的吗?
-
国家的顺序似乎不正确。在第 3 行中,美国排名第一,而在第 6 行中,德国排名第二。还是顺序无关紧要?
-
这是因为我试图根据此人在当前行之前前往的计数来查找前 3 个国家/地区。在第 6 行之前,此人去过美国 3 次,因此美国是第一个国家。
-
我认为样本数据中有一个错字 -
mydata$Date中的第 5 个元素应该是"2012-05-09"而不是"2011-05-09"以获得您想要的最终数据。 -
你是对的。这是一个错字。我已经纠正了。谢谢。
标签: r dataframe dplyr tidyverse rolling-computation