Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用变量块旋转较长的轴_R_Dplyr_Tidyverse_Reshape - Fatal编程技术网

R 使用变量块旋转较长的轴

R 使用变量块旋转较长的轴,r,dplyr,tidyverse,reshape,R,Dplyr,Tidyverse,Reshape,我在变量块上使用pivot\u时遇到问题。假设我有这个: 我想要这个: 如果你可以在一个以上的步骤中完成,这是可行的。首先聚集列,用下划线分隔,然后分散值 pivot_longer(dfwide, x1_a:x2_c, names_to="which") %>% extract(which, into=c("var", "letter"), regex="(.*)_(.*)") %>% p

我在变量块上使用
pivot\u时遇到问题。假设我有这个:


我想要这个:


如果你可以在一个以上的步骤中完成,这是可行的。首先聚集列,用下划线分隔,然后分散值

pivot_longer(dfwide, x1_a:x2_c, names_to="which") %>% 
  extract(which, into=c("var", "letter"), regex="(.*)_(.*)") %>%
  pivot_wider(names_from=letter, values_from=value)

此行利用了
pivot\u longer
函数的名称分隔选项

pivot_longer(dfwide, -date, names_sep = "_", 
             names_to=c("which", ".value")) %>% 
   arrange(which)


    # A tibble: 12 x 5
   date                which     a     b     c
   <dttm>              <chr> <dbl> <dbl> <dbl>
 1 2020-01-01 00:00:00 x1       20    33    70
 2 2020-01-02 00:00:00 x1       15    44    20
 3 2020-01-03 00:00:00 x1       12    85    87
 4 2020-01-04 00:00:00 x1       NA    10    11
 5 2020-01-05 00:00:00 x1       25    12    20
 6 2020-01-06 00:00:00 x1       27     3     5
 7 2020-01-01 00:00:00 x2       85    87    77
 8 2020-01-02 00:00:00 x2       65    25    51
 9 2020-01-03 00:00:00 x2       33    55    92
10 2020-01-04 00:00:00 x2       46    64    20
11 2020-01-05 00:00:00 x2       82    98    37
12 2020-01-06 00:00:00 x2        9     5    98
pivot_longer(dfwide,-date,names_sep=“”,
name_to=c(“which”、“.value”))%>%
安排(哪个)
#一个tibble:12x5
日期a b c
12020-01-01 00:00:00 x1 20 33 70
2020-01-02 00:00:00 x1 15 44 20
32020-01-0300:00:00x1128587
4 2020-01-04 00:00:00 x1 NA 10 11
52020-01-0500:00:00x12520
62020-01-0600:00:00x12735
7 2020-01-01 00:00:00 x2 85 87 77
8 2020-01-02 00:00:00 x2 65 25 51
9 2020-01-03 00:00:00 x2 33 55 92
102020-01-0400:00:00X2466420
11 2020-01-05 00:00:00 x2 82 98 37
12 2020-01-06 00:00:00 x2 9 5 98
您可以尝试以下代码:

library(tidyverse)
dfwide %>% 
  pivot_longer(cols = -date,
               names_to = "which",
               values_to = "value") %>%
  separate(which, into = c("which","letter"), sep = "_") %>%
  pivot_wider(names_from = "letter", values_from = "value") %>%
  arrange(which)
结果是:

# A tibble: 12 x 5
   date                which     a     b     c
   <dttm>              <chr> <dbl> <dbl> <dbl>
 1 2020-01-01 00:00:00 x1       20    33    70
 2 2020-01-02 00:00:00 x1       15    44    20
 3 2020-01-03 00:00:00 x1       12    85    87
 4 2020-01-04 00:00:00 x1       NA    10    11
 5 2020-01-05 00:00:00 x1       25    12    20
 6 2020-01-06 00:00:00 x1       27     3     5
 7 2020-01-01 00:00:00 x2       85    87    77
 8 2020-01-02 00:00:00 x2       65    25    51
 9 2020-01-03 00:00:00 x2       33    55    92
10 2020-01-04 00:00:00 x2       46    64    20
11 2020-01-05 00:00:00 x2       82    98    37
12 2020-01-06 00:00:00 x2        9     5    98
#一个tible:12 x 5
日期a b c
12020-01-01 00:00:00 x1 20 33 70
2020-01-02 00:00:00 x1 15 44 20
32020-01-0300:00:00x1128587
4 2020-01-04 00:00:00 x1 NA 10 11
52020-01-0500:00:00x12520
62020-01-0600:00:00x12735
7 2020-01-01 00:00:00 x2 85 87 77
8 2020-01-02 00:00:00 x2 65 25 51
9 2020-01-03 00:00:00 x2 33 55 92
102020-01-0400:00:00X2466420
11 2020-01-05 00:00:00 x2 82 98 37
12 2020-01-06 00:00:00 x2 9 5 98

dfwide中的数据不完整。拜托,你能修好你的dput吗?哎呀。修正了。只是一个问题@Dave2e,
.value
是如何工作的?顺便说一句,回答得很好。“特殊名称.value:这告诉pivot_longer(),列名的这一部分指定了要测量的“值”。“我的建议是转到tidyr的pivoting vignette,阅读“每行多个观测值”一节(这是pivot longer标题下的几个部分。)感谢您的回答@Dave2e!
library(tidyverse)
dfwide %>% 
  pivot_longer(cols = -date,
               names_to = "which",
               values_to = "value") %>%
  separate(which, into = c("which","letter"), sep = "_") %>%
  pivot_wider(names_from = "letter", values_from = "value") %>%
  arrange(which)
# A tibble: 12 x 5
   date                which     a     b     c
   <dttm>              <chr> <dbl> <dbl> <dbl>
 1 2020-01-01 00:00:00 x1       20    33    70
 2 2020-01-02 00:00:00 x1       15    44    20
 3 2020-01-03 00:00:00 x1       12    85    87
 4 2020-01-04 00:00:00 x1       NA    10    11
 5 2020-01-05 00:00:00 x1       25    12    20
 6 2020-01-06 00:00:00 x1       27     3     5
 7 2020-01-01 00:00:00 x2       85    87    77
 8 2020-01-02 00:00:00 x2       65    25    51
 9 2020-01-03 00:00:00 x2       33    55    92
10 2020-01-04 00:00:00 x2       46    64    20
11 2020-01-05 00:00:00 x2       82    98    37
12 2020-01-06 00:00:00 x2        9     5    98