如何在R语言中将含trait与ID列的DataFrame转换为指定格式
R语言实现长格式数据转布尔值标记的宽格式
原始数据集
初始数据如下:
df <- data.frame(trait = c("Cholesterol", "Cholesterol", "ApoB", "ApoA", "TRI", "TRI"), ID = c(1,2,2,1,1,2))
对应的表格形式:
| trait | ID |
|---|---|
| Cholesterol | 1 |
| Cholesterol | 2 |
| ApoB | 2 |
| ApoA | 1 |
| TRI | 1 |
| TRI | 2 |
转换目标
需要将上述长格式数据转换为宽格式,用布尔值标记每个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
相关产品推荐
相关产品推荐

