R语言如何基于分组id数据生成指定结构的0-1矩阵
R生成指定0-1矩阵的实现方法
你需要的本质是对id列生成独热编码矩阵,每列对应一个id取值,对应行的id匹配时取值为1,其余为0,可通过以下几种常用方案实现:
- 方案1:纯基础R实现,无需加载额外包
# 示例数据构造 id <-c(1,1,1,2,2,3) x <- c(5,7,8,2,6,5) data_toy <- data.frame(id,x) # 生成目标矩阵 res_mat <- as.matrix(table(seq(nrow(data_toy)), data_toy$id))
运行后输出的res_mat即为你需要的6行3列0-1矩阵,若不需要默认列名可执行colnames(res_mat) <- NULL清除。
- 方案2:tidyverse生态实现,适配已有dplyr、tidyr使用习惯的场景
library(tidyverse) res_mat <- data_toy %>% mutate(obs_num = row_number(), flag = 1) %>% pivot_wider(names_from = id, values_from = flag, values_fill = 0) %>% select(`1`, `2`, `3`) %>% as.matrix()
- 方案3:使用独热编码专用包快速生成
# 首次使用需先安装:install.packages("fastDummies") library(fastDummies) res_mat <- dummy_cols(data_toy, select_columns = "id", remove_first_dummy = F, remove_selected_columns = T) %>% as.matrix()
内容的提问来源于stack exchange,提问作者student_R123
相关产品推荐
相关产品推荐

