【问题标题】:A long to wide question or something else一个长到广泛的问题或其他东西
【发布时间】:2020-11-09 14:44:46
【问题描述】:

一个关于长到宽的快速问题。我有数据

structure(list(Var.name = c("UPKTMPT", "UPKLDT", "UPKLTM", "UPKSHPYN", 
"UPKND", "UPKNDSP", "UPKSTDT", "UPKVOL", "UPKSHPDT", "UPKLYN", 
"UPKSPTM", "UPKSTTM", "UPKSPDT", "UPKLSTYN", "EXCCYN", "EXYN", 
"EXDT", "EXSTTM", "EXSPTM", "EXREAS", "EXRSAE2", "EXRSOTH", "EXDSLVL", 
"EXLOTNO", "EXVOLA", "EXDOSA", "EXHELD", "EXHELDSP"), EDCT = c("T568", 
"T568", "T568", "T568", "T568", "T568", "T568", "T568", "T568", 
"T568", "T568", "T568", "T568", "T568", "T492", "T492", "T492", 
"T492", "T492", "T492", "T492", "T492", "T492", "T492", "T492", 
"T492", "T492", "T492")), row.names = c(NA, 28L), class = "data.frame")

如何将我的 cols 名称作为 EDCT 中的每个值。 ……看起来像这样:

我很困惑。如果我需要使用 reshape 使其变长变宽,它需要 idvar amd timvar,而我没有。我该怎么办?这是一个很长很宽的问题吗?

【问题讨论】:

    标签: r reshape


    【解决方案1】:

    你在寻找这样的东西吗?

    df %>%
      tidyr::pivot_wider(names_from = EDCT, values_from = Var.name) %>% 
      tidyr::unnest(cols = everything())
    #> # A tibble: 14 x 2
    #>    T568     T492    
    #>    <chr>    <chr>   
    #>  1 UPKTMPT  EXCCYN  
    #>  2 UPKLDT   EXYN    
    #>  3 UPKLTM   EXDT    
    #>  4 UPKSHPYN EXSTTM  
    #>  5 UPKND    EXSPTM  
    #>  6 UPKNDSP  EXREAS  
    #>  7 UPKSTDT  EXRSAE2 
    #>  8 UPKVOL   EXRSOTH 
    #>  9 UPKSHPDT EXDSLVL 
    #> 10 UPKLYN   EXLOTNO 
    #> 11 UPKSPTM  EXVOLA  
    #> 12 UPKSTTM  EXDOSA  
    #> 13 UPKSPDT  EXHELD  
    #> 14 UPKLSTYN EXHELDSP
    

    或者,作为基础 R 中的单行,

    as.data.frame(lapply(split(df, df$EDCT), function(x) x$Var.name))
    #>        T492     T568
    #> 1    EXCCYN  UPKTMPT
    #> 2      EXYN   UPKLDT
    #> 3      EXDT   UPKLTM
    #> 4    EXSTTM UPKSHPYN
    #> 5    EXSPTM    UPKND
    #> 6    EXREAS  UPKNDSP
    #> 7   EXRSAE2  UPKSTDT
    #> 8   EXRSOTH   UPKVOL
    #> 9   EXDSLVL UPKSHPDT
    #> 10  EXLOTNO   UPKLYN
    #> 11   EXVOLA  UPKSPTM
    #> 12   EXDOSA  UPKSTTM
    #> 13   EXHELD  UPKSPDT
    #> 14 EXHELDSP UPKLSTYN
    

    【讨论】:

    • 是的,这就是我要找的。还有其他方法吗?只是想尽可能多地了解。谢谢。
    • 抱歉回复晚了。非常感谢!
    【解决方案2】:

    使用基础 R:

    newdf = character()
    for(i in unique(df$EDCT)){
      newdf = cbind(newdf, df$Var.name[df$EDCT==i])  
    }
    

    【讨论】:

      【解决方案3】:

      base R中,我们可以使用unstack

      unstack(df1, Var.name ~ EDCT)
      

      -输出

      #       T492     T568
      #1    EXCCYN  UPKTMPT
      #2      EXYN   UPKLDT
      #3      EXDT   UPKLTM
      #4    EXSTTM UPKSHPYN
      #5    EXSPTM    UPKND
      #6    EXREAS  UPKNDSP
      #7   EXRSAE2  UPKSTDT
      #8   EXRSOTH   UPKVOL
      #9   EXDSLVL UPKSHPDT
      #10  EXLOTNO   UPKLYN
      #11   EXVOLA  UPKSPTM
      #12   EXDOSA  UPKSTTM
      #13   EXHELD  UPKSPDT
      #14 EXHELDSP UPKLSTYN
      

      【讨论】:

        猜你喜欢
        • 2018-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多