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

如何在R的tibble(tidyverse)中从单个因子列生成多个布尔列

解决方案

你可以通过以下两种方式用pivot_wider实现需求,核心是明确分组列、设置布尔值填充规则:

方法一:先创建标记列

先添加一个标记存在的布尔列,再通过宽表转换生成目标列:

library(tidyverse)

data <- tibble(
  x = c(1, 1, 1, 2, 2),
  y = c("a", "b", "c", "b", "c"),
  z = c("info1", "info1", "info1", "info2", "info2")
) |>
  mutate_at(vars(y), factor)

dataf <- data |>
  mutate(exists = TRUE) |>  # 标记当前y值对应ID存在
  pivot_wider(
    id_cols = c(x, z),  # 指定需要保留的分组列x和信息列z
    names_from = y,     # 从y列提取新列的名称
    values_from = exists,  # 用标记列填充新列值
    values_fill = FALSE  # 不存在的y值对应位置填充FALSE
  )

方法二:直接用values_fn参数

省略临时标记列,通过values_fn直接生成布尔值:

dataf <- data |>
  pivot_wider(
    id_cols = c(x, z),
    names_from = y,
    values_fn = ~ TRUE,  # 只要ID对应存在该y值就返回TRUE
    values_fill = FALSE  # 缺失值填充FALSE
  )

两种方法运行后都会得到你需要的目标结果:

# A tibble: 2 × 5
      x z     a     b     c    
  <dbl> <chr> <lgl> <lgl> <lgl>
1     1 info1 TRUE  TRUE  TRUE 
2     2 info2 FALSE TRUE  TRUE 

你之前用pivot_wider失败,大概率是没指定id_cols保留z列,或是没设置values_fill和values_fn来控制布尔值的生成规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 02:22:38