R语言如何拼接不含零值的多列为tags列用于多标签分类
R语言多标签列拼接实现方案
你当前代码的核心问题是paste函数会直接拼接所有传入列的全部值,不会自动过滤0值,需要先按行筛选出非零的映射值后再执行拼接,两种常用实现方案如下:
基础R实现
无需安装额外依赖,可直接适配你现有代码:
# 你原有的值映射逻辑 df$TV[df$TV==1] = '1' df$Internet[df$Internet ==1] = '2' df$Mobil[df$Mobil==1] = '3' df$Fastnet[df$Fastnet==1] = '4' # 将0值替换为空字符,方便后续过滤 df$TV[df$TV==0] = '' df$Internet[df$Internet==0] = '' df$Mobil[df$Mobil==0] = '' df$Fastnet[df$Fastnet==0] = '' # 按行遍历四列,过滤空值后拼接 df$tags <- apply(df[,c("TV","Internet","Mobil","Fastnet")], 1, function(row) { paste(row[row != ""], collapse = ",") }) # 如果需要输出带大括号的格式,加上这行即可 df$tags <- paste0("{", df$tags, "}")
tidyverse 实现
适合习惯dplyr语法的场景,代码更简洁:
library(dplyr) df <- df %>% rowwise() %>% mutate( tags = paste( # 筛选符合条件的映射值,自动剔除无效NA na.omit(c( ifelse(TV == 1, "1", NA), ifelse(Internet == 1, "2", NA), ifelse(Mobil == 1, "3", NA), ifelse(Fastnet == 1, "4", NA) )), collapse = "," ), # 如需大括号格式直接在这里拼接即可 tags = paste0("{", tags, "}") ) %>% ungroup()
内容的提问来源于stack exchange,提问作者hideonbush
相关产品推荐
相关产品推荐

