【问题标题】:R: generate value rows for each date extractedR:为提取的每个日期生成值行
【发布时间】:2018-05-25 06:49:33
【问题描述】:

我有一个这样的数据框:

ID   Year   Week  Monday  Tuesday  Wednesday
12   2017    42     8         9         8,5
12   2017    43     9         11        7,3
13   2017    43     9         10        6,8

我想改变它以达到这个目的:

ID   day          time
12   16/10/2017   8
12   17/10/2017   9
12   18/10/2017   8,5
12   23/10/2017   9
12   24/10/2017   11
12   25/10/2017   7,3
12   23/10/2017   9
12   24/10/2017   10
12   25/10/2017   6,8

我正在尝试使用 dplyr,但仍然没有找到解决方案

【问题讨论】:

  • (假设data.table)以melt(dt, id.vars = c('ID', 'Year', 'Week'))开头,然后转换为日期
  • "我正在尝试使用 dplyr"。您可以发布您尝试过但不起作用的代码吗?

标签: r date dplyr data.table extract


【解决方案1】:
library(dplyr)
library(tidyr)

df %>% 
  gather(day, time, Monday:Wednesday) %>%
  mutate(date = as.Date(paste(Year, Week, day),"%Y %U %A")) %>%
  arrange(ID, Year, Week) %>%
  select(-Year, -Week, -day)

#  ID time       date
#1 12    8 2017-10-16
#2 12    9 2017-10-17
#3 12  8,5 2017-10-18
#4 12    9 2017-10-23
#5 12   11 2017-10-24
#6 12  7,3 2017-10-25
#7 13    9 2017-10-23
#8 13   10 2017-10-24
#9 13  6,8 2017-10-25

#sample data
> dput(df)
structure(list(ID = c(12L, 12L, 13L), Year = c(2017L, 2017L, 
2017L), Week = c(42L, 43L, 43L), Monday = c(8L, 9L, 9L), Tuesday = c(9L, 
11L, 10L), Wednesday = structure(c(3L, 2L, 1L), .Label = c("6,8", 
"7,3", "8,5"), class = "factor")), .Names = c("ID", "Year", "Week", 
"Monday", "Tuesday", "Wednesday"), class = "data.frame", row.names = c(NA, 
-3L))

【讨论】:

    猜你喜欢
    • 2021-02-13
    • 1970-01-01
    • 2019-08-14
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    • 2017-02-13
    • 2014-09-07
    • 1970-01-01
    相关资源
    最近更新 更多