gpt4 book ai didi

R 包 DT - 如何突出显示每行最大值

转载 作者:行者123 更新时间:2023-12-01 13:35:41 25 4
gpt4 key购买 nike

在 R 中使用 DT 包,我想为数字数据框突出显示每一行的最大值/最小值

假设我们用 6 个聚类建立了分割,然后我们想用描述性变量来描述这些聚类:

library(DT)
library(tidyverse)
df <- iris[1:6, 1:4] %>% t()
(df)

# 1 2 3 4 5 6
# Sepal.Length 5.1 4.9 4.7 4.6 5.0 5.4
# Sepal.Width 3.5 3.0 3.2 3.1 3.6 3.9
# Petal.Length 1.4 1.4 1.3 1.5 1.4 1.7
# Petal.Width 0.2 0.2 0.2 0.2 0.2 0.4

我们想可视化哪些簇具有最高的 Sepal.Length,哪些簇具有最高的 Sepal.Width,等等。一个解决方案是对每一行的颜色最大值进行着色。

如果我使用 DT 包的 formatStyle() 函数,我可以按列进行(根据特定间隔突出显示最大值、颜色值,...) ,但我不能每行都这样做。即使我使用参数 target = 'row',整个行都会被着色,而不仅仅是我想要的最大值或单元格。

df %>% datatable() %>% 
formatStyle('1', background = styleEqual(max(df[,1]), 'green'))

另一种方法是翻译我的数据框的行和列,但我更喜欢有一个 50 行和 5 列的数据框,而不是一个有 5 行和 50 列且名称很长的数据框。

提前感谢您的帮助和建议。

最佳答案

为此,您需要自定义 rowCallback 函数。这是一个例子:

iris[1:6, 1:4] %>% datatable(options=list(rowCallback = JS(
'function(row, data) {
var num_data = data.slice(1,data.length)
var row_max = Math.max.apply(Math,num_data);
var row_min = Math.min.apply(Math,num_data);
for(i=1;i < data.length; i++) {
if(data[i]==row_max) {
$("td:eq("+i+")", row).css("background-color", "green")
} else if(data[i]==row_min) {
$("td:eq("+i+")", row).css("background-color", "yellow")
}
}
}')))

请注意,您需要从 num_data 中过滤掉任何文本列,包括第一个具有行名的列。

如果你想高亮显示第二高的值,你可以对 num_data 进行排序,并在 JS 代码中调整 if/else 以显示任何你想要的颜色。 num_data 排序后,num_data[num_data.length-1] 是最大值,num_data[0] 是最小值,num_data[num_data. length-2]` 是第二个最大值等

iris[1:6, 1:4] %>% datatable(options=list(rowCallback = JS(
'function(row, data) {
var num_data = data.slice(1,data.length)
num_data.sort(function (a, b) { return a - b; });
for(i=1;i < data.length; i++) {
if(data[i]==num_data[num_data.length-1]) {
$("td:eq("+i+")", row).css("background-color", "green")
} else if(data[i]==num_data[0]) {
$("td:eq("+i+")", row).css("background-color", "yellow")
} else if(data[i]==num_data[num_data.length-2]) {
$("td:eq("+i+")", row).css("background-color", "orange")
}
}
}')))

关于R 包 DT - 如何突出显示每行最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43522147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com