【问题标题】:How to replicate the same expression with tidyverse pipe operator in r?如何在 r 中使用 tidyverse 管道运算符复制相同的表达式?
【发布时间】:2022-01-19 19:54:44
【问题描述】:

我想使用DT::datatble 突出显示数据中每一列中的对应值。

例如:

library(tidyverse)
data(mtcars)
mtcars <- mtcars %>% mutate(across(everything(), as.character))


datatable(mtcars[, c("vs", "am")]) %>%
  formatStyle("vs", backgroundColor = styleEqual(rep(0, sum(mtcars$vs == 0)), rep("yellow", sum(mtcars$vs == 0)))) %>%
  formatStyle("am", backgroundColor = styleEqual(rep(1, sum(mtcars$am == 1)), rep("yellow", sum(mtcars$am == 1))))

在实际情况下,我有多个列,我想迭代所有列以添加formatStyle。有没有办法在循环中复制%&gt;% formatstyle()

# something to start
l <- list()
l[["vs"]] <- 0  
l[["am"]] <- 1

datatable(mtcars[, c("vs", "am")]) %>%
lapply(l, function(i) {
   i ... # multiple formatStyle()
})

在每一列上迭代的目的不是突出vs中的1,或者am中的0

谢谢!

【问题讨论】:

    标签: r dplyr datatable tidyverse dt


    【解决方案1】:

    一种选择是执行for 循环并更新

    library(dplyr)
    library(DT)
    
    mtcars <- mtcars %>% 
         mutate(across(everything(), as.character))
    
    dt1 <- datatable(mtcars %>% 
              select(vs, am))
    nm1 <- list(vs = 0, am = 1)
    for(i in seq_along(nm1)) {
      
      dt1 <- dt1 %>%
        formatStyle(names(nm1)[i], backgroundColor = styleEqual(rep(nm1[[i]], 
            sum(mtcars$vs == nm1[[i]])), rep("yellow", sum(mtcars$vs == nm1[[i]]))))
      
    }
    dt1
    

    -输出

    【讨论】:

      猜你喜欢
      • 2022-07-31
      • 2012-02-12
      • 1970-01-01
      • 2022-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-12
      相关资源
      最近更新 更多