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