如何通过dcast重塑数据框为指定行列格式?reshape2::dcast未达预期
用dcast实现匹配填充1/NA的解决方案
输入数据
先定义输入数据框:
df <- data.frame(cars=c("car1","car2","car4"), colour=c("red","blue","black"))
查看数据:
cars colour 1 car1 red 2 car2 blue 3 car4 black
原代码问题
你使用的reshape2::dcast(cars~colour)存在两个问题:
- 公式顺序错误:需要将
colour作为行、cars作为列,公式应为colour ~ cars - 未指定聚合规则和填充值:没有定义匹配时的返回值,也没设置无匹配时的填充内容
正确实现方法
方法1:使用reshape2::dcast
library(reshape2) # 设置行=colour,列=cars,匹配时填1,无匹配填NA result <- dcast(df, colour ~ cars, fun.aggregate = function(x) 1, fill = NA)
运行后输出:
colour car1 car2 car4 1 black NA NA 1 2 blue NA 1 NA 3 red 1 NA NA
方法2:使用tidyr::pivot_wider(tidyverse风格)
如果习惯用tidyverse工具,也可以用pivot_wider实现:
library(tidyr) result <- pivot_wider(df, names_from = cars, # 列名来源cars列 values_from = cars, # 触发匹配的列 values_fn = function(x) 1, # 匹配时返回1 values_fill = NA) # 无匹配填充NA
输出结果与上述一致。
内容的提问来源于stack exchange,提问作者user2300940
相关产品推荐
相关产品推荐

