如何按日期将数据编译到一列中

时间:2015-10-09 15:00:03

标签: r

我需要更改一个具有按日期排列的变量的数据框,如下所示:

type Var_Day1 Var_Day2 Var_Day3
1   2   66  222
2   5   55  333
3   6   44  555
4   3   33  444
5   4   22  333

到一个新的数据框中,所有日期的变量都有一列。像这样:

type Day Var
1   1   2
2   1   5
3   1   6
4   1   3
5   1   4
1   2   66
2   2   55
3   2   44
4   2   33
5   2   22
1   3   222
2   3   333
3   3   555
4   3   444
5   3   333

我尝试了包重塑和功能融化,但我卡住了。这是我的代码:

install.packages("reshape")
library ("reshape")
data<-read.csv("data by day.csv",header=T)
newdata <- melt(data, id=c("type"))

有什么建议吗? 非常感谢, 迭

2 个答案:

答案 0 :(得分:0)

这样的事情:

library(reshape2)
data("LifeCycleSavings")
LifeCycleSavings$type <- 1:50
colnames(LifeCycleSavings)[1:5] <- paste0("var_day", 1:5)
melt(LifeCycleSavings, id.vars = "type") -> z
as.character(z$variable) -> z$variable
gsub("var_day", "", z$variable) -> z$day
z[,c("type", "day", "value")] -> z
colnames(z)[3] <- "var

答案 1 :(得分:0)

使用dplyrtidyr。首先我们gather数据(与熔化相同),类型为id变量(由-type指定)。然后我们使用extract_numeric

从列标题中获取数字部分
library(dplyr)
library(tidyr)
data %>% gather(day, Var, -type) %>%
         mutate(day = extract_numeric(day))
   type day Var
1     1   1   2
2     2   1   5
3     3   1   6
4     4   1   3
5     5   1   4
6     1   2  66
7     2   2  55
8     3   2  44
9     4   2  33
10    5   2  22
11    1   3 222
12    2   3 333
13    3   3 555
14    4   3 444
15    5   3 333