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

如何在R语言中将含trait与ID列的DataFrame转换为指定格式

R语言实现长格式数据转布尔值标记的宽格式

原始数据集

初始数据如下:

df <- data.frame(trait = c("Cholesterol", "Cholesterol", "ApoB", "ApoA",
"TRI", "TRI"), ID = c(1,2,2,1,1,2))

对应的表格形式:

traitID
Cholesterol1
Cholesterol2
ApoB2
ApoA1
TRI1
TRI2

转换目标

需要将上述长格式数据转换为宽格式,用布尔值标记每个trait对应的ID是否存在,最终格式如下:

trait        1     2
Cholesterol  TRUE  TRUE
ApoB         FALSE TRUE
ApoA         TRUE  FALSE
TRI          TRUE  TRUE

实现方法

方法1:使用tidyverse工具集

通过pivot_wider实现宽格式转换,先给存在的记录标记TRUE,再对缺失的ID填充FALSE:

library(tidyverse)

df_wide <- df %>%
  mutate(value = TRUE) %>%
  pivot_wider(names_from = ID, values_from = value, values_fill = FALSE)

print(df_wide)

方法2:使用base R原生函数

利用table生成频数表,再将频数大于0的记录转换为TRUE:

# 生成trait与ID的交叉频数表
trait_table <- table(df$trait, df$ID)
# 转换为布尔值矩阵并转成数据框
df_wide_base <- as.data.frame.matrix(trait_table > 0)
# 添加trait列并调整顺序
df_wide_base$trait <- rownames(df_wide_base)
df_wide_base <- df_wide_base[, c("trait", "1", "2")]

print(df_wide_base)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 09:45:06