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

如何在R语言中按条件复制并修改数据

R语言按条件复制数据并修改的实现方案

初始数据

df1 <- data.frame(
  value = c("0","0","50","0","25","67"),
  Name = c("alpha","beta","charli","alpha","beta","charli"),
  Position = c("A","A","A","B","B","A")
)

需求说明

需要完成以下操作:

  • 筛选出value > 0且Position = "A"的行并复制一份
  • 原筛选行:将value设为"0",保持Position = "A"
  • 复制行:保留原value,将Position改为"B"
  • 合并所有行得到最终数据框

实现方案

方法1:使用dplyr包(推荐,代码更直观)

library(dplyr)

# 筛选需要处理的目标行
target_rows <- df1 %>% filter(as.numeric(value) > 0 & Position == "A")

# 修改原目标行:value置为0
modified_original <- target_rows %>% mutate(value = "0")

# 修改复制行:Position改为B
copied_modified <- target_rows %>% mutate(Position = "B")

# 合并所有行并排序对齐示例结果
df <- df1 %>%
  filter(!(as.numeric(value) > 0 & Position == "A")) %>%
  bind_rows(modified_original, copied_modified) %>%
  arrange(match(Name, c("alpha", "beta", "charli")), Position)

# 查看结果
print(df)

方法2:使用Base R

# 定义筛选条件
condition <- as.numeric(df1$value) > 0 & df1$Position == "A"

# 提取目标行
target_rows <- df1[condition, ]

# 修改原目标行
modified_original <- target_rows
modified_original$value <- "0"

# 修改复制行
copied_modified <- target_rows
copied_modified$Position <- "B"

# 合并数据并排序对齐示例
df <- rbind(df1[!condition, ], modified_original, copied_modified)
df <- df[order(match(df$Name, c("alpha", "beta", "charli")), df$Position), ]
rownames(df) <- NULL # 重置行名

# 查看结果
print(df)

最终结果

两种方法都会得到符合要求的最终数据框:

#   value    Name Position
# 1     0   alpha        A
# 2     0   alpha        B
# 3     0    beta        A
# 4    25    beta        B
# 5     0 charli        A
# 6    50 charli        B
# 7     0 charli        A
# 8    67 charli        B

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 20:43:20