我试图重新组织我在线提取的数据集。在线表格格式化,以便使用相同的列名并排存在两个表。 (日期,价格|日期,价格)。
>head(data)
Date Price Date.1 Price.1
1 December 17, 2016 1,546bp December 7, 2016 1,720bp
2 December 16, 2016 1,628bp December 6, 2016 1,638bp
3 December 15, 2016 1,714bp December 5, 2016 1,560bp
4 December 14, 2016 1,805bp December 4, 2016 1,511bp
5 December 13, 2016 1,900bp December 3, 2016 1,440bp
所以我要做的就是将左边2个变量右下方的2个变量堆叠起来,按时间顺序排列。
我已经尝试了R中的堆栈功能和reshape2包,但由于数据不是全数字,因此无法正常工作。我尝试了其他方法来创建两个日期变量的数据框,然后将它们堆叠在新的数据框中,但它仍然无法正常工作。无论如何,下面是我用来尝试堆叠变量的代码。
> melt(newtable12, id.vars=c('Date', 'Date.1'), variable.name='DD')
Date Date.1 DD value
1 December 17, 2016 December 7, 2016 Price 1,546bp
2 December 16, 2016 December 6, 2016 Price 1,628bp
3 December 15, 2016 December 5, 2016 Price 1,714bp
4 December 14, 2016 December 4, 2016 Price 1,805bp
5 December 13, 2016 December 3, 2016 Price 1,900bp
6 December 12, 2016 December 2, 2016 Price 2,000bp
7 December 11, 2016 December 1, 2016 Price 1,926bp
8 December 10, 2016 November 30, 2016 Price 1,834bp
9 December 9, 2016 November 29, 2016 Price 1,746bp
10 December 8, 2016 November 28, 2016 Price 1,771bp
任何人都可以提供有关正确堆叠日期/日期1和价格/价格1列的任何见解吗?如果有帮助,我对R有些新意。提前谢谢。
答案 0 :(得分:0)
我认为这应该可以解决问题 - 最后一行可能没有必要,因为您的数据似乎已经按照正确的顺序。
data[nrow(data) + 1:nrow(data), 1:2] <- data[, 3:4]
data <- data[, 1:2] # Remove excess columns
如果仍需要重新订购,那么如果&#39;日期&#39;您可以尝试将列格式化为日期而不是字符串:
data <- data[order(data$Date, decreasing=T), ] # Order by date
否则,如果&#39;日期&#39;列由字符组成,你可以适应这样的东西(虽然它远非一个完美的解决方案):
# Extract date information
data$month <- unlist(strsplit(data$Date, " "))[c(T,F,F)]
data$year <- unlist(strsplit(data$Date, " "))[c(F,F,T)]
data$day <- unlist(strsplit(data$Date, " "))[c(F,T,F)]
data$month <- factor(data$month, levels=month.name)
data$day <- sapply(data$day, function(x) substr(x, 1, nchar(x)-1))
# Order the dataframe
data <- data[order(year, month, day, decreasing=TRUE)