2014-03-13 67 views
0

後,我做了一個轉換函數與我有看起來像這樣的矩陣(只是它的樣品)排序與R中的日期通過行和列的矩陣

ctime 01/13 01/14 02/13 02/14 
01/13 10003 2057 11830 1061 
01/14 0  3722 0  4088 
02/13 0  1485 4765 1267 
02/14 0  0  0  3810 
03/13 0  5268 0  4829 

這個原始數據表是具有列名稱的月份中用戶事務的數量,它是在ctime列的月份中發生的。例如,1月13日到達的用戶在1月13日支付了10003次,但是在1月14日的一年後,同樣的用戶(沒有離開遊戲)支付了2057次。

矩陣現在是數據幀格式,裏面帶有字符。

我想有這樣的

ctime 01/13 02/13 01/14 02/14 
01/13 100038 115830 20573 18061 
02/13 0  47065 14385 12637 
03/13 0  0  54268 48029 
01/14 0  0  37282 42088 
02/14 0  0  0  38910 

矩陣能否請你給我一個提示,我是如何通過的ctime列和行的次序矩陣嗎?

+0

由名字列進行排序,只是參考http ://stackoverflow.com/questions/7334644/r-rearrange-column-names-of-dataframe-alphabetically-or-order-user-wants – hrbrmstr

+0

有一個相當不同的任務,沒有回答我的問題,我不知道是否適合介入我的討論但是,謝謝 –

回答

0

要使用strptime加載您的日期(這將使與order訂購),你還需要還提供一個月的日子:

# Load data 
dat <- read.table(text="ctime 01/13 01/14 02/13 02/14 
01/13 10003 2057 11830 1061 
01/14 0  3722 0  4088 
02/13 0  1485 4765 1267 
02/14 0  0  0  3810 
03/13 0  5268 0  4829", header=T) 
names(dat) <- c("ctime", "01/13", "01/14", "02/13", "02/14") 

# Use strptime to order rows and columns 
dat2 <- dat[order(strptime(paste("01/", dat$ctime), "%d/%m/%y")),-1] 
dat2 <- dat2[,order(strptime(paste("01/", names(dat2)), "%d/%m/%y"))] 
dat2 <- cbind(ctime=dat$ctime, dat2) 
dat2 
# ctime 01/13 02/13 01/14 02/14 
# 1 01/13 10003 11830 2057 1061 
# 3 01/14  0 4765 1485 1267 
# 5 02/13  0  0 5268 4829 
# 2 02/14  0  0 3722 4088 
# 4 03/13  0  0  0 3810 
+0

隨着你的示例工作,但不是在我的整個數據框。執行時沒有錯誤,表格保持與之前相同的狀態。此外,它似乎根本不會添加「01 /」到任何東西 也許我在代碼中丟失了某些東西,我使用這樣的行 'pivotpay2 <-pivotpay [order(strptime(paste(「01 /」,pivotpay $ ctime ),「%d /%m /%y」)), - 1] pivotpay2 <-pivotpay2 [,order(strptime(paste(「01 /」,names(pivotpay2)),%d /%m/y])]' –

+0

找到解決方案 'dat2 < - dat [order(strptime(paste(「01 /」,dat $ ctime),「%d /%m /%Y」)),] dat2 < - dat2 [,order(strptime(paste(「01 /」,names(dat2)),「%d /%m /%Y」))] rownames(dat2)< - dat2 $ ctime dat2 < - dat2 [ ,-ncol(dat2)] dat2' –