You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中按全大写单词拆分数据框列?

解决数据框字符列拆分问题

要实现将开头所有连续的全大写单词归入family列,剩余内容归入sp列,可以使用tidyr::extract函数结合精准正则表达式完成,具体方案如下:

核心思路

通过正则捕获开头的连续全大写单词(支持1个或多个空格分隔的全大写单词),同时捕获剩余全部内容,分别对应family和sp列。

实现代码

library(tidyverse)

mydataframe <- data.frame(species= c("ACTINIDIACEAE Actinidia arguta", 
           "ANACARDIACEAE Attilaea abalak E.Martínez & Ramos", 
           "LEGUMINOSAE CAESALPINIOIDEAE Biancaea decapetala (Roth) O.Deg."),
           trait= c(1,2,4))

# 使用extract拆分目标列
mydataframe <- mydataframe %>%
  extract(species, into = c("family", "sp"), 
          regex = "^(\\b[A-Z]+(?:\\s+[A-Z]+)*)\\s+(.*)$")

# 查看结果
print(mydataframe)

结果说明

执行后得到符合预期的结果:

familysptrait
ACTINIDIACEAEActinidia arguta1
ANACARDIACEAEAttilaea abalak E.Martínez & Ramos2
LEGUMINOSAE CAESALPINIOIDEAEBiancaea decapetala (Roth) O.Deg.4

原方案问题分析

你之前使用的separate搭配\\s+(?=[A-Z]+)正则存在两个问题:

  1. 该正则会在每个全大写单词前的空格处触发拆分,而separate默认仅拆分指定数量的列(此处为2列),导致后续内容丢失;
  2. 对于多全大写单词的字符串,会错误地将第二个全大写单词划入sp列开头,不符合需求。

内容的提问来源于stack exchange,提问作者user18081990

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 10:05:02