文本挖掘项目中拆分数据框行名遇报错的解决方案求助
解决拆分行名时的重复行名错误
你遇到的这个报错,核心原因是数据框的行名必须唯一——当你试图把Adidas重复设为多行的行名时,R会直接抛出double 'row.names' not allowed的提示,毕竟同一个行名对应多条数据是不被允许的。
正确的思路不是修改原行名,而是新增两列分别存储公司名称和年份,这样既保留了原始行名的唯一性,又能满足你按公司+年份分析词表变化的需求。下面给你两种实用的实现方法:
方法1:基础R原生实现
# 提取原始行名 row_names <- rownames(df1) # 拆分前先去掉末尾的".txt"后缀,再按"_"分割字符串 cleaned_names <- sub("\\.txt$", "", row_names) split_names <- strsplit(cleaned_names, "_") # 将拆分结果转换为数据框,并命名列名 company_year <- do.call(rbind, split_names) colnames(company_year) <- c("Company", "Year") # 把公司和年份列合并到原数据框 df1 <- cbind(company_year, df1) # 可选:将Year列转为数值型,方便后续时间维度分析 df1$Year <- as.numeric(df1$Year)
方法2:tidyverse工具包(更简洁直观)
如果你习惯用tidyverse的语法,tidyr::separate()可以一步完成拆分操作:
library(tidyverse) df1 <- df1 %>% # 先把行名转为普通列 rownames_to_column("Original_Row") %>% # 按"_"拆分出公司和年份,同时去掉年份里的".txt" separate(Original_Row, into = c("Company", "Year"), sep = "_") %>% mutate(Year = str_remove(Year, "\\.txt$") %>% as.numeric()) %>% # 可选:如果不需要保留原始行名列,可删除此步 column_to_rownames("Original_Row")
这样处理后,你就会得到Company和Year两个新列,完全可以支撑你研究词表随时间发展的需求,同时不会破坏数据框的结构。
内容的提问来源于stack exchange,提问作者mary
相关产品推荐
相关产品推荐

