繁体   English   中英

我想将以下宽数据框重塑为长

[英]I want to reshape the following wide data frame as into long

这是我的大量数据

 Year Period       Day1       Day2       Day3       Day4       Day5       Day6       Day7
1 1995      1 1995-01-02 1995-01-03 1995-01-04 1995-01-05 1995-01-06 1995-01-07 1995-01-08
2 1995      2 1995-01-09 1995-01-10 1995-01-11 1995-01-12 1995-01-13 1995-01-14 1995-01-15
3 1995      3 1995-01-16 1995-01-17 1995-01-18 1995-01-19 1995-01-20 1995-01-21 1995-01-22
4 1995      4 1995-01-23 1995-01-24 1995-01-25 1995-01-26 1995-01-27 1995-01-28 1995-01-29
5 1995      5 1995-01-30 1995-01-31 1995-02-01 1995-02-02 1995-02-03 1995-02-04 1995-02-05
6 1995      6 1995-02-06 1995-02-07 1995-02-08 1995-02-09 1995-02-10 1995-02-11 1995-02-12

我想将其重塑到

Year    Period  Day
1995    1   1995-01-02
1995    1   1995-01-03
1995    1   1995-01-04
1995    1   1995-01-05
1995    1   1995-01-06
1995    1   1995-01-07
1995    1   1995-01-08
1995    2   1995-01-09
1995    2   1995-01-10
1995    2   1995-01-11
1995    2   1995-01-12
1995    2   1995-01-13
1995    2   1995-01-14
1995    2   1995-01-15

尝试:

 library(reshape2)
 mDat <- melt(dat, id.var=c("Year", "Period"))[,-3]
 mDat1 <- mDat[order(mDat$Year, mDat$Period),]
 row.names(mDat1) <- 1:nrow(mDat1)
 head(mDat1)
 # Year Period      value
 #1 1995      1 1995-01-02
 #2 1995      1 1995-01-03
 #3 1995      1 1995-01-04
 #4 1995      1 1995-01-05
 #5 1995      1 1995-01-06
 #6 1995      1 1995-01-07

或者您可以将dplyrtidyr dplyr使用

 library(dplyr)
 library(tidyr)

  dat%>% 
      gather(Var, Day, starts_with("Day")) %>% 
      select(-Var) %>% 
      arrange(Year, Period) %>%
      head()

  #Year Period        Day
  #1 1995      1 1995-01-02
  #2 1995      1 1995-01-03
  #3 1995      1 1995-01-04
  #4 1995      1 1995-01-05
  #5 1995      1 1995-01-06
  #6 1995      1 1995-01-07

您可以使用reshape2库和功能melt 这是一个例子。 您可以根据ID变量进行分解:

library(reshape2)
data <- data.frame(year=rep("2013", 5), period=seq(1,5), day1=seq(2,6), day2=seq(3,7))
data <- melt(data, id.vars=c("year", "period"))

或者您可以通过度量变量来融化:

data <- melt(data, measure.vars=c("day1", "day2"))

您只需要删除一个不必要的列

data <- data[,-3]

1)使用基数R

reshape(d, varying = paste0("Day", 1:7), sep = "", direction = "long")

2)另一种方法,使用tidyr

gather(d, id, Day, Day1:Day7)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM