首页 > 解决方案 > R:pivot_wider() 扩展数据框

问题描述

我在使用 pivot_wider 将数据帧转换为宽格式时遇到了一些问题。我的数据框如下所示:

Data <- read.table(header = T, text = "
        ID  A         B           C           D
         1  6.01764 0.00409222  0.000500143 101.816
         1  6.01769 0.00431931  0.000565946 101.334
         1  6.01774 0.00454617  0.00063163  101.923
         2  6.01779 0.00477308  0.000697374 101.914
         2  6.01784 0.00500005  0.000763118 101.905
         2  6.0179  0.00522703  0.000828803 101.926
         3  6.01795 0.005454    0.000894606 101.889
         3  6.018   0.00568086  0.000960231 101.895
         3  6.01805 0.00590783  0.00102603  101.87
")

我想通过将“ID”与列名组合来创建唯一的列名,使其看起来像这样:

Datalong <- read.table(header = T, text = "
1A  1B  1C  1D  2A  2B  2C  2D  3A  3B  3C  3D
6.01764 0.00409222  0.000500143 101.816 6.01779 0.00477308  0.000697374 101.914 6.01795 0.005454    0.000894606 101.889
6.01769 0.00431931  0.000565946 101.334 6.01784 0.00500005  0.000763118 101.905 6.018   0.00568086  0.000960231 101.895
6.01774 0.00454617  0.00063163  101.923 6.0179  0.00522703  0.000828803 101.926 6.01805 0.00590783  0.00102603  101.87
")

我在想我可能需要添加一个新列来计算 ID 列的每个实例(因为它是时间序列数据)

我努力了:

DataNew <- Data %>% pivot_wider(names_from = ID, values_from = c(ID, colnames(Data)))

Data %>% group_by(ID) %>% mutate(time = row_number()) %>% pivot_wider(names_from = time, values_from = c(ID, colnames(Data)))

但无济于事。任何支持将不胜感激!

标签: rdplyrtime-seriestidyr

解决方案


这个怎么样:

DataNew <- Data %>% 
  pivot_longer(-ID, names_to="var", values_to="vals") %>% 
  group_by(ID, var) %>% 
  mutate(obs =1:n(), 
         vnames = paste0(ID, var)) %>% 
  ungroup %>% 
  select(-c(ID, var)) %>%
  pivot_wider(names_from = vnames, values_from = vals) %>% 
  select(-obs)

DataNew
# # A tibble: 3 x 12
#   `1A`    `1B`    `1C`  `1D`  `2A`    `2B`    `2C`  `2D`  `3A`    `3B`
#   <dbl>   <dbl>   <dbl> <dbl> <dbl>   <dbl>   <dbl> <dbl> <dbl>   <dbl>
# 1  6.02 0.00409 5.00e-4  102.  6.02 0.00477 6.97e-4  102.  6.02 0.00545
# 2  6.02 0.00432 5.66e-4  101.  6.02 0.00500 7.63e-4  102.  6.02 0.00568
# 3  6.02 0.00455 6.32e-4  102.  6.02 0.00523 8.29e-4  102.  6.02 0.00591
# # … with 2 more variables: `3C` <dbl>, `3D` <dbl>

推荐阅读