R:有条件抑制多列中的值

问题描述 投票:0回答:1

我有大量数据。我喜欢通过用

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()

任何帮助将不胜感激。

r if-statement dplyr purrr suppression
1个回答
0
投票

你可以尝试:

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
© www.soinside.com 2019 - 2024. All rights reserved.