按R中的列和行对日期进行排序

时间:2014-03-13 18:24:38

标签: 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列和行订购矩阵?

1 个答案:

答案 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