我想比较不同的日期格式并设置一个值。我有两个数据帧:
数据帧 1:测试
head(test)
number date country
1 6317004100 2012-10-30 Italy
2 6317071200 2013-12-02 Germany
3 6317064800 2013-03-06 USA
4 6317071200 2013-11-06 Germany
5 6317071200 2013-08-12 Germany
6 6317004100 2012-10-26 Croatia
数据帧2:数据帧
head(dataframe)
date group
1 2012-07 1
2 2012-08 1
3 2012-09 2
4 2012-10 2
5 2012-11 2
6 2012-12 2
7 2013-01 3
8 2013-02 3
9 2013-03 3
10 2013-04 3
11 2013-05 3
12 2013-06 3
13 2013-07 4
14 2013-08 4
15 2013-09 4
16 2013-10 4
17 2013-11 4
18 2013-12 4
我想将test$date与数据帧+日期与规则进行比较: 2012-07 年test$date的所有内容都归入第 1 组,2012-08 年的所有内容归入第 1 组,依此类推......我得到这个输出:
> test
number date country group
1 6317004100 2012-10-30 Italy 2
2 6317071200 2013-12-02 Germany 4
3 6317064800 2013-03-06 USA 4
4 6317071200 2013-11-06 Germany 4
5 6317071200 2013-08-12 Germany 4
6 6317004100 2012-10-26 Croatia 2
我试过这个:
> merge(dataframe, test, by.x="date", by.y="date")
[1] date group number country
<0 rowes> (or row.names with length 0)
但什么也没发生。这两个日期列都是因子。
任何想法会起作用吗?
非合并选项将使用match
.在这里,我们将test
转换为YYYY-MM格式,并用dataframe$date
match
并获得相应的group
。
test$group <- dataframe$group[
match(format(as.Date(test$date), "%Y-%m"), dataframe$date)]
test
# number date country group
#1 6317004100 2012-10-30 Italy 2
#2 6317071200 2013-12-02 Germany 4
#3 6317064800 2013-03-06 USA 3
#4 6317071200 2013-11-06 Germany 4
#5 6317071200 2013-08-12 Germany 4
#6 6317004100 2012-10-26 Croatia 2
merge
选项是创建新的Date2
列
test$Date2 <- format(as.Date(test$date),"%Y-%m")
merge(dataframe, test, by.x = "date", by.y = "Date2")
# date group number date country
#1 2012-10 2 6317004100 2012-10-30 Italy
#2 2012-10 2 6317004100 2012-10-26 Croatia
#3 2013-03 3 6317064800 2013-03-06 USA
#4 2013-08 4 6317071200 2013-08-12 Germany
#5 2013-11 4 6317071200 2013-11-06 Germany
#6 2013-12 4 6317071200 2013-12-02 Germany
带tidyverse
:
df1%>%
mutate(mnt=format(as.Date(date), "%Y-%m"))%>%
left_join(df2%>%mutate(date=as.character(date)),by=c("mnt"="date"))
number date country mnt group
1 6317004100 2012-10-30 Italy 2012-10 2
2 6317071200 2013-12-02 Germany 2013-12 4
3 6317064800 2013-03-06 USA 2013-03 3
4 6317071200 2013-11-06 Germany 2013-11 4
5 6317071200 2013-08-12 Germany 2013-08 4
6 6317004100 2012-10-26 Croatia 2012-10 2