You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

当type列存在NA值时,如何在R中正确透视tidy数据?

解决方案

这里提供两种简洁的tidyverse实现方式:

方法1:先填充缺失的type值再透视

先按ID分组,将每个ID中type列的NA替换为该ID内的有效type值(这里是3),之后再执行透视操作,最后去重得到目标结果:

library(tidyverse)

test <- data.frame(ID = c(rep(1, 3), rep(2,3), rep(3,3)), 
                   type = rep(c(3,3,NA),3), 
                   label = rep(c("test1", "test2", "test3"),3), 
                   value = rep(5:7,3))

test %>%
  group_by(ID) %>%
  mutate(type = replace_na(type, first(na.omit(type)))) %>%
  pivot_wider(names_from = label, values_from = value) %>%
  distinct()

运行后输出:

# A tibble: 3 × 5
# Groups:   ID [3]
     ID  type test1 test2 test3
  <dbl> <dbl> <int> <int> <int>
1     1     3     5     6     7
2     2     3     5     6     7
3     3     3     5     6     7

方法2:先透视再合并同ID的列值

先执行透视得到初始结果,再按ID分组,对每个列提取第一个非缺失值,实现同ID行的合并:

test %>%
  pivot_wider(names_from = label, values_from = value) %>%
  group_by(ID) %>%
  summarize(
    type = first(na.omit(type)),
    test1 = first(na.omit(test1)),
    test2 = first(na.omit(test2)),
    test3 = first(na.omit(test3))
  )

此方法同样会得到你期望的输出结果。

内容的提问来源于stack exchange,提问作者vizidea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 18:33:06