如何让数据框中多描述列生成单个因子水平而非组合水平?
解决方案:将多描述符转换为单个词因子
方法一:用tidyverse简洁处理(推荐)
借助separate_rows()函数直接拆分每行的多描述符,转成单个词的因子:
library(tidyverse) # 原数据 data <- data.frame( type = c("sticky, warm", "ugly, matte", "warm, glittery", "ugly, glittery") ) # 拆分并转为因子 data_clean <- data %>% separate_rows(type, sep = ", ") %>% mutate(type = factor(type)) # 查看结果 data_clean$type
运行后因子水平为:
Levels: glittery matte sticky ugly warm
方法二:Base R原生实现
不用额外包的话,拆分字符串后重构数据再转因子:
# 原数据 data <- data.frame( type = c("sticky, warm", "ugly, matte", "warm, glittery", "ugly, glittery") ) # 拆分字符串为列表,再转成单个词的向量 type_words <- unlist(strsplit(data$type, ", ")) # 构建新数据框并转因子 data_clean <- data.frame(type = factor(type_words)) # 查看结果 data_clean$type
为什么你之前的方法没用?
直接对strsplit()得到的列表用factor(),会把整个列表元素(比如"sticky, warm"拆分后的向量)当成单个因子水平,而不是提取里面的单个词。必须先把列表拆成单个元素的向量,再转换因子。
内容的提问来源于stack exchange,提问作者Fortanow
相关产品推荐
相关产品推荐

