Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何使用自定义阈值按行自定义datatable_R_Dt_Formattable - Fatal编程技术网

R 如何使用自定义阈值按行自定义datatable

R 如何使用自定义阈值按行自定义datatable,r,dt,formattable,R,Dt,Formattable,这与另一个问题有关 目前,我使用这段代码是为了对我的表应用一些样式 只有当值超过行的第三个分位数时,我才需要给每个单元格着色,问题是DT似乎不允许按行工作,而只允许按列工作 formattable()工作正常,但我失去了一些有用的属性,例如使用editable=T编辑单元格的可能性 library(formattable) library(DT) dat <- as.data.frame(matrix(AirPassengers, ncol=12, byrow=T)) find_ano

这与另一个问题有关

目前,我使用这段代码是为了对我的表应用一些样式

只有当值超过
的第三个分位数时,我才需要给每个单元格着色,问题是
DT
似乎不允许按
工作,而只允许按
工作

formattable()
工作正常,但我失去了一些有用的属性,例如使用
editable=T
编辑单元格的可能性

library(formattable)
library(DT)

dat <- as.data.frame(matrix(AirPassengers, ncol=12, byrow=T))

find_anomaly <- function(x) {
  q3 <- quantile(x, 0.75)
  q3
}

ftable <- formattable(dat, lapply(1:nrow(dat), function(row) {
  area(row, col = 1:12) ~ formatter("span", style = x ~ ifelse(x > find_anomaly(x),
                                                               style(
                                                                 display = "block",
                                                                 padding = "0 4px",
                                                                 "border-radius" = "4px",
                                                                 "color" = csscolor("white"),
                                                                 "background-color" = csscolor(
                                                                   gradient(as.numeric(x),"white", "orangered"))),
                                                               NA))
}))

as.datatable(ftable, editable=T)
库(格式化表)
图书馆(DT)

dat这里是一个使用
DT
的解决方案,将
呈现
选项应用于每一列:

library(DT)

products <- data.frame(
  X1 = round(runif(5),2),
  X2 = round(runif(5),2),
  X3 = round(runif(5),2),
  X4 = round(runif(5),2),
  X5 = round(runif(5),2),
  X6 = round(runif(5),2),
  X7 = round(runif(5),2),
  X8 = round(runif(5),2),
  X9 = round(runif(5),2),
  X10 = round(runif(5),2)
)

render <- c(
  "function(data, type, row){",
  "  if(type === 'display'){",
  "    var arr = row.slice();",
  "    arr.sort();",
  "    var per75 =  Math.floor(row.length*.75) - 1;",
  "    var s = data >= arr[per75] ? '<span style=\"padding: 0 4px; border-radius: 4px; background-color: red;\">' + data + '</span>' : data;",
  "    return s;",
  "  } else {",
  "    return data;",
  "  }",
  "}"
)

datatable(products, editable = "cell", rownames = FALSE, 
          options = list(
            columnDefs = list(
              list(targets = "_all", render = JS(render))
            )
          )
)
库(DT)

产品谢谢!这真的很好,我可以麻烦你一个小问题吗?请看我的更新,我似乎无法使它与JS代码一起工作..如果是OT,很抱歉。基本上,我的阈值应该由四分位范围加上第三个分位数来给出。@r请注意,我在代码中没有看到任何错误。可能是因为您没有高于阈值的数据?你试过formattable了吗?我删除了这里的“-1”数学地板(row.length*.75)-1,它可以正常工作。我能问一下是否可以将
render
应用到除前2列之外的所有列吗?可能通过更改
targets=“\u all”
参数?目前我使用的是
targets=c(1:12)
,但我不确定它是否正确。@RLave您可以执行
targets=c(3,4,5,6,7,8,9,10)
,或
targets=setdiff(1:10,c(1,2))
**编辑**不,对不起,第一列由
0
索引。做
setdiff(0:9,c(0,1))
,而不是。