如何把长格式数据转换为宽格式,并将缺失值填充为0

编程语言 2026-07-10

我有一个已经包含NA的长格式表:

df <- data.frame(
  ID = c(1, 1, 2, 2, 3),
  region = c("A", "B", "A", "B", "A"),
  status = c(1, NA, 1, 1, NA)
)

我想把它转换为宽格式,但并不是用NA来填充缺失值,而是用零来填充,这样就能与长格式中的原始NA区分开。

reshape(
  df,
  idvar = "ID",
  timevar = "region",
  direction = "wide"
)

这里举个例子,由于对ID=3、region=B没有信息,它就变成了另一个NA,我希望把它改为零。

解决方案

这可能是一个重复的问题,但这里给出一个使用data.table的解法:

library(data.table)


setDT(df)
dcast(df, ID ~ region, fill = 0)

#       ID     A     B
#    <num> <num> <num>
# 1:     1     1    NA
# 2:     2     1     1
# 3:     3    NA     0
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章