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

R语言中复制DataFrame行并修改city列值的实现求助

解决方法

首先修正你原代码里的列名错误(cod_ubicacion应该是city),然后在复制行之后,通过分组标记+自定义命名的方式修改city列,以下是完整实现:

library(dplyr)

# 你的原始DataFrame
df <- tibble(
  city = c("city1", "city2"),
  value = c(15, 20)
)

# 完整处理代码
df %>%
  # 添加复制次数列,修正列名为city
  mutate(ncity = if_else(city == "city1", 4, 5)) %>%
  # 按指定次数复制行
  slice(rep(seq_len(n()), ncity)) %>%
  # 按原始行分组,区分city1和city2的复制组
  group_by(original_group = rep(seq_len(nrow(df)), c(4, 5))) %>%
  mutate(
    # 组内行号
    row_in_group = row_number(),
    # 按需求指定每组的city名称
    city = case_when(
      original_group == 1 ~ paste0("city", c(1, 3, 4, 5)[row_in_group]),
      original_group == 2 ~ paste0("city", c(2, 6, 7, 8, 9)[row_in_group])
    )
  ) %>%
  # 取消分组,移除辅助列
  ungroup() %>%
  select(-ncity, -original_group, -row_in_group)

代码说明

  1. 修正列名:原代码中cod_ubicacion是笔误,替换为实际列名city;
  2. 行复制:slice(rep(...))按指定次数(city1复制4次、city2复制5次)生成重复行;
  3. 分组标记:group_by(original_group)把复制后的行按原始数据的行分组,确保能精准控制每组的city命名;
  4. 自定义命名:通过case_when结合组内行号,直接映射到你需要的city名称;
  5. 清理输出:移除过程中生成的辅助列,得到最终目标DataFrame。

如果后续需要处理更多城市,也可以用更灵活的自动编号方式(避免手动写名称列表):

df %>%
  mutate(ncity = if_else(city == "city1", 4, 5)) %>%
  slice(rep(seq_len(n()), ncity)) %>%
  mutate(
    # 提取原始city的数字部分
    base_num = as.integer(stringr::str_extract(city, "\\d+")),
    # 定义每组的编号序列
    num_seq = case_when(
      base_num == 1 ~ c(1, 3:5),
      base_num == 2 ~ c(2, 6:9)
    )
  ) %>%
  mutate(city = paste0("city", num_seq)) %>%
  select(-ncity, -base_num, -num_seq)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 10:45:10