如何保留数据列中前4个单词且保留不足4词的记录?
解决R语言stringr::word函数处理不足4词时返回NA的问题
问题场景
处理数据的Company列时,需要保留每条记录的前4个单词,单词数不足4个的则完整保留原记录,但使用stringr::word(df$Company, 1, 4)时,不足4词的记录会被转为NA,不符合需求。
可行解决方案
方案1:拆分+截取+合并(依赖stringr和purrr)
通过拆分字符串为单词列表,截取前4个(不足4个则取全部)后重新合并:
library(stringr) library(purrr) # 处理Company列 df$Company1 <- map_chr( str_split(df$Company, "\\s+"), # 按空格拆分单词 ~str_c(.[1:min(4, length(.))], collapse = " ") # 取前4个(或全部)再合并 )
方案2:判断单词数后分支处理(仅依赖stringr)
先统计每条记录的单词数,根据数量决定是截取前4词还是保留原内容:
library(stringr) # 计算每条记录的单词数(空格数+1) word_num <- str_count(df$Company, "\\s+") + 1 # 条件赋值 df$Company1 <- ifelse( word_num >= 4, word(df$Company, 1, 4), # 单词数≥4时取前4个 df$Company # 单词数<4时保留原内容 )
方案验证
用你的样本数据测试:
- 单词语句
ATHENAHEALTH会完整保留 - 双词语句
AMERICAN APPAREL会完整保留 - 多词语句
FAIRFIELD NURSING AND REHABILITATION CENTER,会被截取为FAIRFIELD NURSING AND REHABILITATION
内容的提问来源于stack exchange,提问作者bear_525
相关产品推荐
相关产品推荐

