【发布时间】:2017-01-17 12:44:24
【问题描述】:
我有一个“宽”数据框,其中包含日期作为列标题。使用转换功能,我可以把它变成一个“长”的数据框。但是,我需要将日期(列标题)作为新变量作为实际数据点。让我用一个类似的数据框来说明这个问题:
matrix <- matrix(round(runif(25)*10), nrow = 5, ncol = 5)
hospital_names <- c("Hosp A", "Hosp B", "Hosp C", "Hosp D", "Hosp E")
dates <- c("Jan 03", "Feb 03", "Mar 03", "Apr 03", "May 03")
df <- as.data.frame(matrix)
colnames(df) = dates
df <- cbind(hospital_names, df)
这给出了一个如下所示的数据框:
hospital_names Jan 03 Feb 03 Mar 03 Apr 03 May 03
1 Hosp A 10 3 1 9 2
2 Hosp B 8 5 8 6 0
3 Hosp C 9 1 9 2 5
4 Hosp D 4 0 7 0 4
5 Hosp E 0 8 9 2 4
我现在应用变换函数:
df <- t(df)
得到这个:
[,1] [,2] [,3] [,4] [,5]
hospital_names "Hosp A" "Hosp B" "Hosp C" "Hosp D" "Hosp E"
Jan 03 "10" "8" "9" "4" "0"
Feb 03 "3" "5" "1" "0" "8"
Mar 03 "1" "8" "9" "7" "9"
Apr 03 "9" "6" "2" "0" "2"
May 03 "2" "0" "5" "4" "4"
所以在这一点上,我的日期是实际的行名而不是数据点。我的问题是,有没有简单的解决方法?我可以将行名转换为向量,然后使用 cbind 将其添加为变量吗?
【问题讨论】:
-
reshape2melt重复 -
使用
reshape代替转换。 -
文章标题也可以更好地描述为转置矩阵,而不是宽/长变化
-
基于第二个重复链接:
library(reshape2); recast(df, variable ~ hospital_names, id.var = 'hospital_names')