R语言如何对dataframe指定列的单元格内容按字母顺序排序
根本性错误
你写的代码存在三个核心问题:
- 索引位置误用:你把对Modules列的处理逻辑放到了
df[行索引, 列索引]的行索引位置,R会将lapply返回的列表当做行筛选条件使用,完全达不到修改列内容的目的 - 未处理拆分后的空格:直接按逗号拆分字符串会得到带前导空格的模块名(比如
" Advanced chemistry"),空格会干扰字母排序的结果 - 没有重新拼接字符串:strsplit返回的是拆分后的向量列表,排序后需要重新拼接为逗号分隔的字符串,才能赋值回原数据框的Modules列
正确实现代码
Base R 写法
df$Modules <- sapply(strsplit(as.character(df$Modules), ",\\s*"), function(x) { paste(sort(x), collapse = ", ") })
代码说明
strsplit(as.character(df$Modules), ",\\s*"):按「逗号+任意数量空白字符」拆分原字符串,避免拆分结果出现前导空格- 用sapply遍历每个拆分后的字符串向量,执行sort排序
- 用
paste(..., collapse = ", ")将排序后的向量重新拼接为逗号分隔的字符串 - 把处理后的结果直接赋值回原数据框的Modules列,完成修改
内容的提问来源于stack exchange,提问作者user16949460
相关产品推荐
相关产品推荐

