【问题标题】:Reshape package from long to wide将包裹从长变宽
【发布时间】:2021-06-07 13:52:10
【问题描述】:

我有一个很长的数据集,我想扩展它,我想知道是否有一种方法可以使用 R 的 reshape 包一步完成。

数据框df如下所示:

     Date      Time   value
   <chr>     <time> <dbl>
 1 Wednesday 16:09  10.7 
 2 Wednesday 16:10   8.86
 3 Wednesday 16:11   8.59
 4 Wednesday 16:12   8.59
 5 Wednesday 16:13   7.51
 6 Wednesday 16:14   6.71
 7 Wednesday 16:15   6.44
 8 Wednesday 16:16   4.83
 9 Wednesday 16:17   4.56
10 Wednesday 16:18   4.29

我想解决这个问题:

Date           16:09 16:10  16:11   16:12 ...
Wednesday      10.7   8.86    8.59   8.59     

   
   Sample code: 

df_wide<-reshape(df, idvar = "Time", v.names="value", timevar = "Date" , direction = "wide")  

                 

Sample data:

    structure(list(Date = c("Wednesday", "Wednesday", "Wednesday", 
"Wednesday", "Wednesday", "Wednesday", "Wednesday", "Wednesday", 
"Wednesday", "Wednesday", "Wednesday", "Wednesday", "Wednesday", 
"Wednesday", "Wednesday", "Wednesday", "Wednesday", "Wednesday", 
"Wednesday", "Wednesday", "Wednesday", "Wednesday", "Wednesday", 
"Wednesday", "Wednesday", "Wednesday", "Wednesday", "Wednesday", 
"Wednesday", "Wednesday", "Wednesday", "Wednesday"), Time = structure(c(58140, 
58200, 58260, 58320, 58380, 58440, 58500, 58560, 58620, 58680, 
58740, 58800, 58860, 58920, 58980, 59040, 59100, 59160, 59220, 
59280, 59340, 59400, 59460, 59520, 59580, 59640, 59700, 59760, 
59820, 59880, 59940, 60000), class = c("hms", "difftime"), units = "secs"), 
    value = c(10.733333, 8.855, 8.586667, 8.586667, 7.513333, 
    6.708333, 6.44, 4.83, 4.561667, 4.293333, 3.756667, 3.756667, 
    3.756667, 3.756667, 3.756667, 3.756667, 4.025, 3.756667, 
    4.025, 4.025, 4.025, 4.025, 5.635, 5.366667, 5.903333, 4.83, 
    4.83, 5.098333, 4.83, 7.781667, 7.245, 6.171667)), class = c("spec_tbl_df", 
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -32L), spec = structure(list(
    cols = list(Date = structure(list(), class = c("collector_character", 
    "collector")), Time = structure(list(format = ""), class = c("collector_time", 
    "collector")), value = structure(list(), class = c("collector_double", 
    "collector"))), default = structure(list(), class = c("collector_guess", 
    "collector")), skip = 1L), class = "col_spec"))

【问题讨论】:

  • 我查看了reshape,老实说,我无法弄清楚这个是如何工作的。所以我发布了一个(恕我直言)更简单的替代方案。

标签: r dataframe


【解决方案1】:

我们可以使用dcast

library(data.table)
dcast(setDT(df), Date ~ Time)

【讨论】:

    【解决方案2】:

    您可以改用tidyr

    df %>%
      pivot_wider(names_from=Time, values_from=value)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-18
      • 1970-01-01
      • 1970-01-01
      • 2020-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多