我想将每个站点的重复值替换为 NA 并保留从左到右出现的第一个重复值。
例如,在站点“Alz-Ettelbruck”上,值“7”在第 4 列和第 5 列中重复。这意味着只有该站点的第 5 列应返回 NA。数字 12 在“Our-Gemund/Vianden”网站的所有列中重复,因此我想将 12 保留在第 2 列中,但其余的应替换为 NA。
为此,我使用了重复的函数,但它返回“NULL”。
为了重现该问题,我使用了以下数据框,并在最后指出了所需的输出。
任何帮助将不胜感激。预先感谢您。
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))
# Replace repeated values with NA per row
data <- for (i in 1:nrow(df)) {
df[i, -1][duplicated(df[i, -1])] <- NA
}
以下是我希望脚本返回的内容:
这不是“最好的”(因为混合类框架上的
apply
会在内部强制所有内容),但这是有效的:
df[t(apply(df, 1, duplicated))] <- NA
df
# 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