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

R语言按站点将重复值替换为NA并保留首次值的问题求助

解决按行替换重复值为NA的问题

问题原因

你得到NULL是因为R的for循环默认不返回任何值,你把for循环赋值给data变量,自然会得到NULL。而且你的循环逻辑是直接修改原数据框df,不需要额外赋值给新变量。

解决方案

方法1:修正原有的for循环

直接循环修改df,不要把for循环赋值给变量:

df <- data.frame(stringsAsFactors = FALSE,
                 check.names = FALSE,
                        Site = c("Att-Bissen","Alz-Ettelbruck","Our-Gemund/Vianden",
                                 "Syre Felsmuhle/Mertert","Ernz Blanche-Larochette"),
  `2001-12-01 to 2021-12-01` = c(12, 1, 12, 1, 8),
  `1991-12-01.to 2021-12-01` = c(5, 4, 12, 6, 14),
  `1981-12-01 to 2021-12-01` = c(12, 7, 12, 20, 14),
  `1971-12-01 to 2021-12-01` = c(19, 7, 12, 13, 14))

# 直接循环修改df,不需要赋值给data
for (i in 1:nrow(df)) {
  df[i, -1][duplicated(df[i, -1])] <- NA
}

# 查看结果
print(df)

方法2:用apply函数更简洁处理

按行遍历数值列,替换重复值为NA,再转置回原格式:

df[, -1] <- t(apply(df[, -1], 1, function(x) {
  x[duplicated(x)] <- NA
  x
}))

方法3:tidyverse风格(dplyr)

用rowwise按行处理,结合across和c_across实现需求:

library(dplyr)

df <- df %>%
  rowwise() %>%
  mutate(across(-Site, ~ ifelse(duplicated(c_across(-Site)), NA, .x))) %>%
  ungroup()

最终输出结果

处理后的数据框会符合你的预期:

Site 2001-12-01 to 2021-12-01 1991-12-01.to 2021-12-01 1981-12-01 to 2021-12-01 1971-12-01 to 2021-12-01
1             Att-Bissen                        12                         5                        NA                        19
2          Alz-Ettelbruck                         1                         4                         7                         NA
3     Our-Gemund/Vianden                        12                        NA                        NA                        NA
4 Syre Felsmuhle/Mertert                         1                         6                        20                        13
5  Ernz Blanche-Larochette                         8                        14                        NA                        NA

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 13:35:24