如何在R中将DataFrame的Flair列转换为二进制独热编码列?
解决方案
示例数据
先模拟一份和你结构一致的测试数据,方便验证效果:
df <- data.frame( Flair = c("技术", "生活", "技术", "娱乐"), Text = c("R语言技巧", "日常做饭", "数据处理", "电影推荐"), Time = c("2024-01-01", "2024-01-02", "2024-01-03", "2024-01-04") )
方法1:使用tidyverse工具链
适合习惯tidy风格的用户,步骤清晰:
library(tidyverse) df_result <- df %>% # 新增值列,用于转宽时标记匹配行 mutate(value = 1) %>% # 将Flair的唯一值转为列,缺失值填充0 pivot_wider( id_cols = c(Text, Time), # 保留的核心列 names_from = Flair, # 要展开的列 values_from = value, # 填充的数值 values_fill = 0 # 未匹配行填0 ) %>% # 给生成的Flair列添加前缀 rename_with(~paste0("Flair_", .), -c(Text, Time))
方法2:基础R原生实现
无需额外安装包,适合轻量需求:
# 生成Flair的二进制矩阵(无截距项) flair_binary <- model.matrix(~ Flair - 1, data = df) # 给列名添加Flair_前缀 colnames(flair_binary) <- paste0("Flair_", sub("Flair", "", colnames(flair_binary))) # 合并原数据的Text、Time列与二进制矩阵 df_result2 <- cbind(df[, c("Text", "Time")], flair_binary)
两种方法最终都会得到你需要的结果:保留Text和Time列,同时为每个Flair唯一值生成Flair_前缀的二进制列,匹配行取值1,其余为0。
内容的提问来源于stack exchange,提问作者Säge Zwiebel
相关产品推荐
相关产品推荐

