【问题标题】:spread to wide dataframe group by multiple variables in R? [duplicate]通过R中的多个变量传播到广泛的数据框组? [复制]
【发布时间】:2023-06-28 08:28:01
【问题描述】:

我试图使用pivot_wider()spread() 函数将我的数据从长格式改写为宽格式。是否可以通过多个变量(即我的数据框中的 ccode 和 year)传播到广泛的数据框组?

当前数据框:

ccode industry year TO
2 agri 2000 8.3
2 agri 2001 9.2
2 mineral 2000 9.1
3 agri 2000 6.1
3 agri 2001 8.1
3 mineral 2000 9
4 agri 2000 9
4 agri 2001 5.3
4 mineral 2000 8.1
5 agri 2000 8.4
5 agri 2001 4.3
5 mineral 2000 4.2

理想结果:

ccode year agri mineral
2 2000 8.3 9.1
2 2001 9.2 NA
3 2000 6.1 9
3 2001 8.1 NA
4 2000 9 8.1
4 2001 5.3 NA
5 2000 8.4 9.1
5 2001 4.3 4.2

谢谢。

【问题讨论】:

  • 您实际上并没有通过多个变量来传播数据——您用来创建列名的唯一变量是行业。应该只是 spreadpivot_wider 的一个简单用例

标签: r dataframe pivot-table tidyr spread


【解决方案1】:

我们可以使用pivot_wider

library(tidyr)
pivot_wider(df1, names_from = industry, values_from = TO)

-输出

# A tibble: 8 x 4
#  ccode  year  agri mineral
#  <int> <int> <dbl>   <dbl>
#1     2  2000   8.3     9.1
#2     2  2001   9.2    NA  
#3     3  2000   6.1     9  
#4     3  2001   8.1    NA  
#5     4  2000   9       8.1
#6     4  2001   5.3    NA  
#7     5  2000   8.4     4.2
#8     5  2001   4.3    NA  

数据

df1 <- structure(list(ccode = c(2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 
5L, 5L, 5L), industry = c("agri", "agri", "mineral", "agri", 
"agri", "mineral", "agri", "agri", "mineral", "agri", "agri", 
"mineral"), year = c(2000L, 2001L, 2000L, 2000L, 2001L, 2000L, 
2000L, 2001L, 2000L, 2000L, 2001L, 2000L), TO = c(8.3, 9.2, 9.1, 
6.1, 8.1, 9, 9, 5.3, 8.1, 8.4, 4.3, 4.2)), class = "data.frame",
row.names = c(NA, 
-12L))

【讨论】:

    最近更新 更多