R语言中如何反转数据框字符串变量内的单词顺序?
解决R语言中反转字符串单词顺序的问题
问题分析
你原代码的问题在于:strsplit()返回的是列表对象,每个列表元素对应原字符串拆分后的单词向量。直接对整个列表调用rev(),是反转了列表中元素的整体顺序(而非每个元素内部的单词顺序),再用paste()拼接时,会把列表的结构文本直接输出,导致结果不符合预期。
修正后的解法
方法1:Base R实现
先修正原数据框的创建问题(原代码创建3行数据框但赋值4个元素会报错),再用sapply()遍历拆分后的列表,逐个处理每个字符串的单词反转:
# 正确创建数据框 mydata <- data.frame(uni = c("University of Texas", "University of Washington", "Harvard University", "The Scripps Research Institute")) # 生成反转单词顺序的新变量 mydata$uni_revs <- sapply(strsplit(mydata$uni, " "), function(x) paste(rev(x), collapse = " "))
方法2:Tidyverse实现
如果习惯用tidyverse工具链,可结合dplyr和stringr处理:
library(dplyr) library(stringr) mydata <- mydata %>% mutate(uni_revs = str_split(uni, " ") %>% map_chr(~paste(rev(.x), collapse = " ")))
验证结果
运行后mydata$uni_revs的结果为:
[1] "Texas of University" "Washington of University" [3] "University Harvard" "Institute Research Scripps The"
(注:你预期结果中的"University Havard"应为笔误,正确结果是"University Harvard")
内容的提问来源于stack exchange,提问作者EmilA
相关产品推荐
相关产品推荐

