我需要更改一个具有按日期排列的变量的数据框,如下所示:
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"))
有什么建议吗? 非常感谢, 迭
答案 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)
使用dplyr
和tidyr
。首先我们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