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

如何在R数据集中为二级设备添加对应一级父级值列

R 数据集新增父级设备列解决方案

示例数据预处理

你给出的示例通过cbind()生成的是字符矩阵,先转换为数据框更方便列操作:

equipment <- c("cleats","whistle","Football","Bat","Pink Ball","Cricket")
level <- c(2,2,1,2,2,1)
dt <- data.frame(equipment, level, stringsAsFactors = FALSE)

方法1:tidyverse 实现(推荐)

核心逻辑是先标记所有父级设备,再按顺序填充到子设备行:

library(dplyr)
library(tidyr)

dt_result <- dt %>%
  # 给level=1的父级行填充自身设备名,其余行留空
  mutate(parent_equipment = ifelse(level == 1, equipment, NA_character_)) %>%
  # 填充空值:示例中父级在对应子级之后,用"up"向上填充;如果父级在子级之前,改为"down"
  fill(parent_equipment, .direction = "up") %>%
  # 可选操作:level=1的父级行不需要标注父级的话,设为空值
  mutate(parent_equipment = ifelse(level == 1, NA_character_, parent_equipment))

方法2:base R 实现(无需安装第三方包)

# 提取所有level=1的父级位置和对应名称
parent_idx <- which(dt$level == 1)
parent_names <- dt$equipment[parent_idx]
# 匹配每行对应的父级设备
dt$parent_equipment <- parent_names[findInterval(seq(nrow(dt)), parent_idx, left.open = TRUE) + 1]
# 可选操作:level=1的父级行父级设为空值
dt$parent_equipment[dt$level == 1] <- NA_character_

结果说明

最终输出的数据集会新增parent_equipment列,匹配规则和示例结果对应:

  • cleats、whistle的父级为Football
  • Bat、Pink Ball的父级为Cricket
  • 两个level1的父级设备默认留空,可根据需求调整为保留自身名称。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:24:05