R:堆叠多个列

时间:2016-12-18 05:02:54

标签: r

我试图重新组织我在线提取的数据集。在线表格格式化,以便使用相同的列名并排存在两个表。 (日期,价格|日期,价格)。

>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有些新意。提前谢谢。

1 个答案:

答案 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)
相关问题