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

在R中使用str_split()将单列拆分为两列的问题求助

问题分析与修正

你的代码主要存在3个问题:

  1. 列名拼写错误:原数据框的列名是nome_completo,但你写的是complete_name,导致程序找不到目标列。
  2. 列表索引逻辑错误:str_split(..., simplify=FALSE)返回的是长度等于数据框行数的列表,每个列表元素对应一行的拆分结果。你用[[1]]是取整个列表的第一行结果,而非对每行单独提取,会导致所有行复用第一行的拆分值,完全不符合需求。
  3. 参数写法不规范:str_split的拆分次数参数应显式写n=2,虽然位置传参也能运行,但可读性较差。

修正后的代码(贴近原代码逻辑)

library(dplyr)
library(stringr)

df %>%
  mutate(
    # 提取每行拆分结果的第一个元素作为名字
    first_name = sapply(str_split(nome_completo, " ", simplify = FALSE, n = 2), `[`, 1),
    # 提取每行拆分结果的第二个元素作为姓氏
    second_name = sapply(str_split(nome_completo, " ", simplify = FALSE, n = 2), `[`, 2)
  )

更简洁的写法(仍满足simplify=FALSE要求)

如果不想重复调用str_split,可以先把拆分结果存为临时列,再提取:

df %>%
  mutate(
    split_fullname = str_split(nome_completo, " ", simplify = FALSE, n = 2),
    first_name = sapply(split_fullname, `[`, 1),
    second_name = sapply(split_fullname, `[`, 2),
    # 可选:删除临时列
    split_fullname = NULL
  )

逻辑说明

  • str_split(..., simplify=FALSE)返回的列表中,每个元素是对应行拆分后的字符向量(比如第一行是c("John", "Smith"))。
  • 用sapply遍历这个列表,对每个向量提取第1/2个元素,最终得到对应列的字符向量,正好匹配数据框的行数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 20:12:36