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

如何用R和dplyr多次复制并替换重复记录中的特定值?

多次复制DataFrame记录并修改指定行的解决方案

原始数据定义

name <- c("Kiwi","Orange","Apple")
val1 <- c(1,9,10)
val2 <- c(1,1,1)

df <- data.frame(name, val1, val2)

单次操作可行,但多次操作失效

你可以成功复制name == "Apple"的行并修改名称为"Strawberry":

df.2 <- df %>%
            filter(name == "Apple") %>%
            mutate(name = "Strawberry") %>%
            bind_rows(., df)

但按下面的方式多次执行时,无法得到预期结果:

df.2 <- df %>%
            filter(name == "Apple") %>%
            mutate(name = "Strawberry") %>%
            bind_rows(., df) %>%
            filter(name == "Apple") %>%
            mutate(name = "Dragonfruit") %>%
            bind_rows(., df)

预期结果

你想要得到的最终DataFrame是:

val1 <- c(10,10,1,9,10)
val2 <- c(1,1,1,1,1)
name <- c("Dragonfruit","Strawberry","Kiwi","Orange","Apple")

expected.result <- data.frame(name, val1, val2)

问题原因与解决方法

你的多次操作里,每次bind_rows(., df)都会把原始df重新合并一次,导致最终数据里重复出现原始行,而不是只保留一次原始数据加上新增的两行。

正确的做法是先一次性生成所有需要复制修改的行,再和原始df合并:

# 提取Apple行作为模板
apple_template <- df %>% filter(name == "Apple")

# 生成所有需要的新行(对应Strawberry和Dragonfruit)
new_rows <- apple_template %>%
  mutate(name = c("Strawberry", "Dragonfruit"))

# 合并新行与原始df,得到预期结果
result <- bind_rows(new_rows, df)

执行这段代码后,result就和你想要的expected.result一致了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 07:43:52