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

在R中如何为指定行生成重复行并赋值,保留其他行数据?

解决方案

场景1:仅单一行val=1的情况

可以用tidyr::unnest配合列表赋值的方式直接生成目标结果:

library(tidyverse)

x <- tibble(
  val = 1,
  val2 = NA
)

x %>%
  mutate(val2 = if_else(val == 1, list(c(5, 2)), list(val2))) %>%
  unnest(val2)

运行后输出:

# A tibble: 2 × 2
    val  val2
  <dbl> <dbl>
1     1     5
2     1     2

你之前尝试的直接赋值x$val2[x$val == 1] <- c(5,3)报错,是因为原数据仅1行,但你要赋值2个元素,长度不匹配;zeallot的%<-%是解构赋值,本身不具备扩展行的功能,所以只会取第一个值。

场景2:多val值需保留其他行的情况

方法1:mutate+unnest组合

针对val=1的行生成包含多个值的列表,其他行保持单个NA的列表,unnest后即可保留所有行同时扩展目标行:

library(tidyverse)

x <- tibble(
  val = c(1,2,3),
  val2 = NA
)

x %>%
  mutate(val2 = case_when(
    val == 1 ~ list(c(5, 2)),
    TRUE ~ list(val2)
  )) %>%
  unnest(val2)

运行结果完全符合预期:

# A tibble: 4 × 2
    val  val2
  <dbl> <dbl>
1     1     5
2     1     2
3     2    NA
4     3    NA

方法2:bind_rows合并法

先筛选出val=1的行复制并赋值,再和原数据中val!=1的行合并,逻辑更直观:

x_target <- x %>%
  filter(val == 1) %>%
  slice(rep(1, 2)) %>%
  mutate(val2 = c(5, 2))

bind_rows(x_target, x %>% filter(val != 1)) %>%
  arrange(val)

内容的提问来源于stack exchange,提问作者Jorge Hernández

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 17:05:23