在我使用原始数据表执行了一个强制转换函数后,我得到了一个看起来像这样的矩阵(只是它的一个样本)
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 :(得分: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