我有大量数据。我喜欢通过用
6
替换每列中小于 -1
的任何值来抑制多列中的数据,这样如果在一列中只有一个抑制值,我也想抑制下一个更高的值,即使更高的值比6
。
我的虚拟数据是:
df = structure(list(x = c(1, 25, 9, 50), y = c(1, 35, 8, 6), z = c(4,50, 1, 1)), class = "data.frame", row.names = c(NA, -4L))
预期输出是:
x y z
1 -1 -1 -1
2 25 35 50
3 -1 8 -1
4 50 -1 -1
我喜欢map(),因此,我对列迭代条件数据抑制的想法没有实现。
column_names1 <- colnames(df)
df |>
map(\ (x)
column_names1 <- colnames(df)
var <- ensym(y)
{if((x |>
select({{var}}) |>
filter({{var}} == -1) |>
nrow())==1){
x |>
mutate(val2 = dense_rank({{var}})) |>
mutate(val = ifelse(val2 == 2, -1, val)) |>
select(-val2)
}else{
x
}}
) |>
list_cbind()
任何帮助将不胜感激。
你可以尝试:
library(dplyr)
df |>
mutate(across(
everything(),
\(x) if (sum(x < 6) <= 1)
replace(x, x %in% sort(unique(x), partial = 2)[1:2], -1)
else
replace(x, x < 6, -1)
))
x y z
1 -1 -1 -1
2 25 35 50
3 -1 8 -1
4 50 -1 -1