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

如何仅填充DataFrame中size为0的行?取值自name列最后段

解决DataFrame中仅修改size为0行的问题

我明白你的困扰——想只更新size列值为0的行,把它们替换成name列的最后一段,但之前的代码不小心修改了所有行对吧?别担心,核心就是精准筛选目标行再赋值,下面给你两种可行的方案:

基础R方案

先确认你的示例数据:

vertices <- data.frame(
  name = c("a","b","c","a.b","a.c","a.a.9","a.b.8"),
  size = c(1,5,6,2,6,0,0)
)

步骤很清晰:先提取name列的最后一段,然后只给size == 0的行赋值:

# 拆分name列,提取每个元素的最后一段
last_part <- sapply(strsplit(as.character(vertices$name), "\\."), function(x) x[length(x)])
# 转为数值型(适配你示例里的数字结尾场景,若最后一段是文本可跳过此步)
last_part <- as.numeric(last_part)

# 关键操作:仅修改size为0的行,不影响其他数据
vertices$size[vertices$size == 0] <- last_part[vertices$size == 0]

tidyverse(dplyr)方案

如果你习惯用tidyverse语法,代码会更简洁直观:

library(dplyr)
library(stringr)

vertices <- vertices %>%
  mutate(
    size = case_when(
      size == 0 ~ as.numeric(str_split(name, "\\.") %>% map_chr(last)),
      TRUE ~ size  # 其他行保持原size值不变
    )
  )

验证结果

运行后你会得到符合预期的DataFrame:

print(vertices)
#      name size
# 1       a    1
# 2       b    5
# 3       c    6
# 4     a.b    2
# 5     a.c    6
# 6  a.a.9    9
# 7  a.b.8    8

核心要点就是利用逻辑索引或者case_when来限定修改范围,这样就不会误改其他行啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:02:09