簡體   English   中英

R:堆疊多列

[英]R : Stacking multiple columns

我正在嘗試重新整理我在線提取的數據集。 聯機表的格式被設置為使得兩個並排的表使用相同的列名。 (日期,價格|日期,價格)。

>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中的stack函數和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

誰能提供有關正確堆疊date / date.1和price / price.1列的任何見解? 如果有幫助,我對R還是有些陌生。 先感謝您。

我認為這應該可以解決問題-由於您的數據似乎已經按照正確的順序排列,因此最后一行可能沒有必要。

data[nrow(data) + 1:nrow(data), 1:2] <- data[, 3:4]
data <- data[, 1:2]                                  # Remove excess columns

如果仍然需要重新排序,那么如果“日期”列的格式設置為日期,而不是字符串,則可以嘗試:

data <- data[order(data$Date, decreasing=T), ]       # Order by date

否則,如果“日期”列由字符組成,則您可以改寫類似的內容(盡管這不是完美的解決方案):

# 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM