所以这是我的问题,我有大约40个数据集,所有csv文件只包含两列,(a)日期和(b)价格(对于每个数据集,价格列被命名为其国家)..我使用了合并功能如下,将所有数据合并为一个数据集,其中包含一个日期列和多个价格列。这是我使用的功能:
merged <- Reduce(function(x, y) merge(x, y, by="Date", all=TRUE), list(a,b,c,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an))
发生的事情是我在日期栏中有3个相同日期的值,但相应的国家/地区值被拆分。 e.g:
# Date India China South Korea
# 01-Jan-2000 5445 NA 4445 NA
# 01-Jan-2000 NA 1234 NA NA
# 01-Jan-2000 NA NA NA 5678
我其实想要
# 01-Jan-2000 5445 1234 4445 5678
我不知道如何解决这个问题,因为与此主题相关的其他问题要求总结我显然不需要的值。这是一个简单的例子。不幸的是,我有大约43个国家的2000年1月至2016年11月的每日数据,所有数据都搞砸了。任何帮助解决这个问题将不胜感激。
答案 0 :(得分:0)
我会使用rbind
附加所有数据框,并使用spread()
重新整形结果。合并取决于您开始使用的数据帧。
可再现的例子:
library(dplyr)
a <- data.frame(date = Sys.Date()-1:10, cntry = "China", price=round(rnorm(10,20,5),2))
b <- data.frame(date = Sys.Date()-6:15, cntry = "Netherlands", price=round(rnorm(10,50,10),2))
c <- data.frame(date = Sys.Date()-11:20, cntry = "USA", price=round(rnorm(10,70,25),2))
all <- do.call(rbind, list(a,b,c))
all %>% group_by(date) %>% spread(cntry, price)
结果:
date China Netherlands USA
* <date> <dbl> <dbl> <dbl>
1 2016-11-29 NA NA 78.75
2 2016-11-30 NA NA 66.22
3 2016-12-01 NA NA 86.04
4 2016-12-02 NA NA 17.07
5 2016-12-03 NA NA 75.72
6 2016-12-04 NA 46.90 39.57
7 2016-12-05 NA 51.80 65.11
8 2016-12-06 NA 57.50 96.36
9 2016-12-07 NA 46.42 46.93
10 2016-12-08 NA 45.71 57.63
11 2016-12-09 15.41 60.09 NA
12 2016-12-10 16.66 60.07 NA
13 2016-12-11 23.72 66.21 NA
14 2016-12-12 19.82 45.46 NA
15 2016-12-13 14.22 45.07 NA
16 2016-12-14 27.26 NA NA
17 2016-12-15 20.08 NA NA
18 2016-12-16 15.79 NA NA
19 2016-12-17 17.66 NA NA
20 2016-12-18 26.77 NA NA