R语言技术问题:如何基于唯一值展开列并整合数值列
解决方案
首先构造和你描述一致的示例数据方便测试:
df <- data.frame( ID = c("321", "321", "321", "067", "067", "067"), COLOR = c("RED", "GREEN", "BLUE", "RED", "BLUE", "YELLOW"), NUMBER = c(3, 10, 4, 50, 2, 3), stringsAsFactors = FALSE )
方法1:使用tidyverse包的pivot_wider(推荐)
这是tidyverse生态下的标准宽格式转换函数,语法清晰直观:
library(tidyverse) wide_df <- df %>% pivot_wider( id_cols = ID, # 指定行标识符为ID names_from = COLOR, # 把COLOR列的取值作为新列名 values_from = NUMBER, # 用NUMBER列的值填充对应位置 values_fill = list(NUMBER = 0) # 无对应值时填充0 )
方法2:使用reshape2包的dcast
如果习惯使用reshape2包,也可以用dcast实现:
library(reshape2) wide_df <- dcast(df, ID ~ COLOR, value.var = "NUMBER", fill = 0)
为什么之前的table方法无效?
你之前用的table()函数只能统计分组频数,没法关联NUMBER列的具体数值,所以当需要保留NUMBER的实际值时,必须用专门的长转宽函数,上面两种方法都能精准匹配ID、COLOR对应的NUMBER值,自动补0。
内容的提问来源于stack exchange,提问作者anni
相关产品推荐
相关产品推荐

