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

提取babynames数据集姓名中间字符:6字符姓名结果异常排查

问题原因分析

你的代码异常核心是条件判断逻辑错误,错把「判断姓名长度的奇偶性」写成了「判断length/2的奇偶性」:

  • 对于长度为6的姓名,length/2 = 3,3 %% 2 != 0结果为TRUE,触发了奇数长度的分支,只提取了第3个字符(比如Minnie的第3位是n),而不是预期的中间两个字符(第3和第4位)。
  • 正确的判断逻辑应该是直接检查姓名长度本身是否为奇数:length %% 2 != 0。
修正后的代码
library(tidyverse)
library(babynames)

babynames |>
  mutate(
    length = str_length(name),
    middle = if_else(length %% 2 != 0, 
             str_sub(name, ceiling(length / 2), ceiling(length / 2)),
             str_sub(name, length / 2, (length / 2)+1)
    )
  )
额外优化建议

可以用整数除法简化索引计算,让代码更清晰:

  • 奇数长度:中间位置是(length + 1) %/% 2
  • 偶数长度:起始位置是length %/% 2,结束位置是length %/% 2 + 1

优化后代码:

babynames |>
  mutate(
    length = str_length(name),
    middle = if_else(length %% 2 != 0, 
             str_sub(name, (length + 1) %/% 2, (length + 1) %/% 2),
             str_sub(name, length %/% 2, length %/% 2 + 1)
    )
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:09:24