【问题标题】:transpose from one variable under another in R从R中的一个变量转置另一个变量
【发布时间】:2020-10-19 13:27:04
【问题描述】:

这里是我的数据示例

 mydat=structure(list(ADR.N.14.0 = c(8140010250001, 8140010250002), 
    NOMYAR.N.16.6 = c(1, 1), KOFPOR1.N.16.6 = c(7, 10), POR1.C.254 = c("о", 
    "BB"), VOZPOR1.N.16.6 = c(80, 45), VYSPOR1.N.16.6 = c(24, 
    17), DEMPOR1.N.16.6 = c(36, 16), POLNOT1.N.16.6 = c(0.6, 
    0.9), ZAPZAH1.N.16.6 = c(210, 160), NOMYAR2.N.16.6 = c(1, 
    1), KOFSOCT2.N.16.6 = c(3, 0), POR2.C.254 = c("BB", "о"), 
    VOZPOR2.N.16.6 = c(70, 45), VYSPOR2.N.16.6 = c(22, 17), DEMPOR2.N.16.6 = c(26, 
    22), POLNOT2.N.16.6 = c(0, 0), ZAPZAH2.N.16.6 = c(0, 0)), class = "data.frame", row.names = c(NA, 
-2L))

ADR,N,14,0的每个值如何将数据从一个变量下移到另一个变量下。 为了更清楚 这里有前缀 1 的变量

NOMYAR,N,16,6   KOFPOR**1**,N,16,6  POR**1**,C,254  VOZPOR**1**,N,16,6  VYSPOR**1**,N,16,6  DEMPOR**1**,N,16,6  POLNOT**1**,N,16,6  ZAPZAH**1**,N,16,6

以及带有前缀 2 的行附近

NOMYAR**2**,N,16,6  KOFPOR**2**,N,16,6  POR**2**,C,254  VOZPOR**2**,N,16,6  VYSPOR**1**,N,16,6  DEMPOR**2**,N,16,6  POLNOT**2**,N,16,6  ZAPZAH**2**,N,16,6

所以我需要 ADR,N,14,0 =8140010250001 前缀为 2 的字段内容在前缀为 1 的字段内容之下 像这样

result=structure(list(ADR.N.14.0 = c(8140010250001, 8140010250001, 8140010250002, 
8140010250002, NA, NA, NA, NA, NA, NA), NOMYAR.N.16.6 = c(1, 
1, 1, 1, NA, NA, NA, NA, NA, NA), KOFPOR1.N.16.6 = c(7, 3, 10, 
0, NA, NA, NA, NA, NA, NA), POR1.C.254 = c("о", "BB", "BB", "о", 
"", "", "", "", "", ""), VOZPOR1.N.16.6 = c(80, 70, 45, 45, NA, 
NA, NA, NA, NA, NA), VYSPOR1.N.16.6 = c(24, 22, 17, 17, NA, NA, 
NA, NA, NA, NA), DEMPOR1.N.16.6 = c(36, 26, 16, 22, NA, NA, NA, 
NA, NA, NA), POLNOT1.N.16.6 = c(0.6, 0, 0.9, 0, NA, NA, NA, NA, 
NA, NA), ZAPZAH1.N.16.6 = c(210, 0, 160, 0, NA, NA, NA, NA, NA, 
NA)), class = "data.frame", row.names = c(NA, -10L))

我怎么能做这样的转置?

【问题讨论】:

    标签: r dplyr data.table


    【解决方案1】:

    您可以使用pivot_longer 并指定names_pattern 以包含您想要的名称模式。

    tidyr::pivot_longer(mydat, cols = -ADR.N.14.0, 
                        names_to = c('.value'), 
                        names_pattern = '(.*?)\\d?\\..*')
    
    #     ADR.N.14.0 NOMYAR KOFPOR POR   VOZPOR VYSPOR DEMPOR POLNOT ZAPZAH KOFSOCT
    #          <dbl>  <dbl>  <dbl> <chr>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>   <dbl>
    #1 8140010250001      1      7 о         80     24     36    0.6    210       3
    #2 8140010250001      1     NA BB        70     22     26    0        0      NA
    #3 8140010250002      1     10 BB        45     17     16    0.9    160       0
    #4 8140010250002      1     NA о         45     17     22    0        0      NA
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      • 2018-03-17
      • 2014-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多