微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

重塑表格:通过每年重复多列来扩大表格

如何解决重塑表格:通过每年重复多列来扩大表格

为了就地运行绘图代码,我想重塑我的 data.table。

我的数据表目前看起来类似于:

df <- data.frame(culture=c("A","B","C","D","A","D"),Year=c("2000","2000","2001","2002","2002"),a=rep(1:6,2),b=rep(6:11,c=rep(10:15,2))

我想得到的表应该有每年重复的列名 a、b 和 c。所需列:culture、a_2000、b_2000、c_2000、a_2001、b_2001、c_2001、a_2002、b_2002、c_2002

有没有简单的方法可以做到这一点?

我试过了:

df1<-df %>% pivot_wider(names_from = c(3:6),values_from = value)

df1<-df %>% spread(key=c(a,b,c),value,fill=NA)

df1<-df %>% nest(a,c,.key = 'value_col') %>% spread(key=Jahr,value=value_col) %>% unnest('2000','2001','2002',.sep = '_')

正如你从我失败的尝试中看到的,我在 r 方面还没有那么有经验。

我最后一次尝试形成的建议是:https://community.rstudio.com/t/spread-with-multiple-value-columns/5378 然而这也不起作用

有什么建议吗?

解决方法

这是一个 pivot_wider 方法:

library(tidyr)
df %>%
  pivot_wider(id_cols = culture,names_from = Year,values_from = !c(culture,Year))
# A tibble: 4 x 10
  culture a_2000 a_2001 a_2002 b_2000 b_2001 b_2002 c_2000 c_2001 c_2002
  <chr>    <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>
1 A            1      5      3      6     10      8     10     14     12
2 B            2      6      4      7     11      9     11     15     13
3 C            3      1      5      8      6     10     12     10     14
4 D            4      2      6      9      7     11     13     11     15

您可以通过其他方式选择 values_from 列。查看help(tidyr_tidy_select)

此外,您可以使用 names_glue = 控制列名的构成方式:

df %>%
  pivot_wider(id_cols = culture,Year),names_glue = "Year_{Year}_{.value}")
# A tibble: 4 x 10
  culture Year_2000_a Year_2001_a Year_2002_a Year_2000_b Year_2001_b Year_2002_b Year_2000_c Year_2001_c Year_2002_c
  <chr>         <int>       <int>       <int>       <int>       <int>       <int>       <int>       <int>       <int>
1 A                 1           5           3           6          10           8          10          14          12
2 B                 2           6           4           7          11           9          11          15          13
3 C                 3           1           5           8           6          10          12          10          14
4 D                 4           2           6           9           7          11          13          11          15

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。