如何解决重塑表格:通过每年重复多列来扩大表格
为了就地运行绘图代码,我想重塑我的 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 举报,一经查实,本站将立刻删除。