在单行中格式化 gt table 的方法?
Way to format gt table across a single row?
我正在尝试根据条件格式化我的 gt table,但有点停滞不前。我发现的大多数示例都是基于 headers.
列的格式
这是示例代码 table,其中第一列名为“行”,值 1-6。我如何让 gt table 仅向第 1 行的值 > 3.0 添加颜色?这是我的第一个问题,如果我搞砸了,请见谅!
library(tidyverse)
library(gt)
iris %>%
group_by(Species) %>%
slice_max(Sepal.Length, n=5) %>%
group_by(Species) %>%
mutate(row=row_number()) %>%
pivot_longer(-c(Species, row)) %>%
mutate(Species = str_to_title(Species),
name = gsub("\.", " ", name)) %>%
pivot_wider(names_from=c(Species, name), values_from=value)%>%
gt() %>%
tab_spanner_delim(
delim="_"
)
我们可以用 cell_fill
添加 tab_style
并用 columns
和 rows
指定 locations
library(dplyr)
library(tidyr)
library(gt)
library(stringr)
iris %>%
group_by(Species) %>%
slice_max(Sepal.Length, n=5) %>%
group_by(Species) %>%
mutate(row=row_number()) %>%
pivot_longer(-c(Species, row)) %>%
mutate(Species = str_to_title(Species),
name = gsub("\.", " ", name)) %>%
pivot_wider(names_from=c(Species, name), values_from=value)%>%
gt() %>%
tab_spanner_delim(
delim="_"
) %>%
tab_style(
style = list(
cell_fill(color = "lightgreen")
),
locations = cells_body(
columns = c(`Setosa_Sepal Length`, `Setosa_Sepal Width`,
`Versicolor_Sepal Length`, `Versicolor_Sepal Width`, `Versicolor_Petal Length`,
`Virginica_Sepal Length`,`Virginica_Sepal Width`, `Virginica_Petal Length`),
rows = 1
)
)
-输出
更新
根据评论,如果我们需要为每一列使用条件,那么我们可以使用 for
循环遍历列名并添加条件层并更新原始 gt
对象 ('tbl1')
tbl1 <- iris %>%
group_by(Species) %>%
slice_max(Sepal.Length, n=5) %>%
group_by(Species) %>%
mutate(row=row_number()) %>%
pivot_longer(-c(Species, row)) %>%
mutate(Species = str_to_title(Species),
name = gsub("\.", " ", name)) %>%
pivot_wider(names_from=c(Species, name), values_from=value)%>%
gt() %>%
tab_spanner_delim(
delim="_"
)
nm1 <- names(tbl1$`_data`)[-1]
for(i in seq_along(nm1)) {
tbl1 <- tbl1 %>%
tab_style(
style = list(
cell_fill(color = "lightgreen")
),
locations = cells_body(
columns = nm1[i],
rows = seq_along(tbl1$`_data`[[nm1[i]]]) == 1 &
tbl1$`_data`[[nm1[i]]] > 3
)
)
}
-输出
如果您只想突出显示值大于 3 的单元格 - 这意味着您不想像 akrun 那样通过名称通知它们 - 恐怕您必须使用蛮力(每列的条件)。我为前 5 列工作,因为它只是重复:
library(tidyverse)
library(gt)
df <- iris %>%
group_by(Species) %>%
slice_max(Sepal.Length, n=5) %>%
group_by(Species) %>%
mutate(row=row_number()) %>%
pivot_longer(-c(Species, row)) %>%
mutate(Species = str_to_title(Species),
name = gsub("\.", " ", name)) %>%
pivot_wider(names_from=c(Species, name), values_from=value)
df%>%
gt() %>%
tab_style(
style = list(
cell_fill(color = "lightgreen")
),
locations = cells_body(
columns = vars(`Setosa_Sepal Length`),
rows = row == 1 & `Setosa_Sepal Length` > 3
)) %>%
tab_style(
style = list(
cell_fill(color = "lightgreen")
),
locations = cells_body(
columns = vars(`Setosa_Sepal Width`),
rows = row == 1 & `Setosa_Sepal Width` > 3
)) %>%
tab_style(
style = list(
cell_fill(color = "lightgreen")
),
locations = cells_body(
columns = vars(`Setosa_Petal Length`),
rows = row == 1 & `Setosa_Petal Length` > 3
)) %>%
tab_style(
style = list(
cell_fill(color = "lightgreen")
),
locations = cells_body(
columns = vars(`Setosa_Petal Width`),
rows = row == 1 & `Setosa_Petal Width` > 3
)) %>%
tab_style(
style = list(
cell_fill(color = "lightgreen")
),
locations = cells_body(
columns = vars(`Versicolor_Sepal Length`),
rows = row == 1 & `Versicolor_Sepal Length` > 3
)) %>%
tab_spanner_delim(
delim="_"
)
我正在尝试根据条件格式化我的 gt table,但有点停滞不前。我发现的大多数示例都是基于 headers.
列的格式这是示例代码 table,其中第一列名为“行”,值 1-6。我如何让 gt table 仅向第 1 行的值 > 3.0 添加颜色?这是我的第一个问题,如果我搞砸了,请见谅!
library(tidyverse)
library(gt)
iris %>%
group_by(Species) %>%
slice_max(Sepal.Length, n=5) %>%
group_by(Species) %>%
mutate(row=row_number()) %>%
pivot_longer(-c(Species, row)) %>%
mutate(Species = str_to_title(Species),
name = gsub("\.", " ", name)) %>%
pivot_wider(names_from=c(Species, name), values_from=value)%>%
gt() %>%
tab_spanner_delim(
delim="_"
)
我们可以用 cell_fill
添加 tab_style
并用 columns
和 rows
locations
library(dplyr)
library(tidyr)
library(gt)
library(stringr)
iris %>%
group_by(Species) %>%
slice_max(Sepal.Length, n=5) %>%
group_by(Species) %>%
mutate(row=row_number()) %>%
pivot_longer(-c(Species, row)) %>%
mutate(Species = str_to_title(Species),
name = gsub("\.", " ", name)) %>%
pivot_wider(names_from=c(Species, name), values_from=value)%>%
gt() %>%
tab_spanner_delim(
delim="_"
) %>%
tab_style(
style = list(
cell_fill(color = "lightgreen")
),
locations = cells_body(
columns = c(`Setosa_Sepal Length`, `Setosa_Sepal Width`,
`Versicolor_Sepal Length`, `Versicolor_Sepal Width`, `Versicolor_Petal Length`,
`Virginica_Sepal Length`,`Virginica_Sepal Width`, `Virginica_Petal Length`),
rows = 1
)
)
-输出
更新
根据评论,如果我们需要为每一列使用条件,那么我们可以使用 for
循环遍历列名并添加条件层并更新原始 gt
对象 ('tbl1')
tbl1 <- iris %>%
group_by(Species) %>%
slice_max(Sepal.Length, n=5) %>%
group_by(Species) %>%
mutate(row=row_number()) %>%
pivot_longer(-c(Species, row)) %>%
mutate(Species = str_to_title(Species),
name = gsub("\.", " ", name)) %>%
pivot_wider(names_from=c(Species, name), values_from=value)%>%
gt() %>%
tab_spanner_delim(
delim="_"
)
nm1 <- names(tbl1$`_data`)[-1]
for(i in seq_along(nm1)) {
tbl1 <- tbl1 %>%
tab_style(
style = list(
cell_fill(color = "lightgreen")
),
locations = cells_body(
columns = nm1[i],
rows = seq_along(tbl1$`_data`[[nm1[i]]]) == 1 &
tbl1$`_data`[[nm1[i]]] > 3
)
)
}
-输出
如果您只想突出显示值大于 3 的单元格 - 这意味着您不想像 akrun 那样通过名称通知它们 - 恐怕您必须使用蛮力(每列的条件)。我为前 5 列工作,因为它只是重复:
library(tidyverse)
library(gt)
df <- iris %>%
group_by(Species) %>%
slice_max(Sepal.Length, n=5) %>%
group_by(Species) %>%
mutate(row=row_number()) %>%
pivot_longer(-c(Species, row)) %>%
mutate(Species = str_to_title(Species),
name = gsub("\.", " ", name)) %>%
pivot_wider(names_from=c(Species, name), values_from=value)
df%>%
gt() %>%
tab_style(
style = list(
cell_fill(color = "lightgreen")
),
locations = cells_body(
columns = vars(`Setosa_Sepal Length`),
rows = row == 1 & `Setosa_Sepal Length` > 3
)) %>%
tab_style(
style = list(
cell_fill(color = "lightgreen")
),
locations = cells_body(
columns = vars(`Setosa_Sepal Width`),
rows = row == 1 & `Setosa_Sepal Width` > 3
)) %>%
tab_style(
style = list(
cell_fill(color = "lightgreen")
),
locations = cells_body(
columns = vars(`Setosa_Petal Length`),
rows = row == 1 & `Setosa_Petal Length` > 3
)) %>%
tab_style(
style = list(
cell_fill(color = "lightgreen")
),
locations = cells_body(
columns = vars(`Setosa_Petal Width`),
rows = row == 1 & `Setosa_Petal Width` > 3
)) %>%
tab_style(
style = list(
cell_fill(color = "lightgreen")
),
locations = cells_body(
columns = vars(`Versicolor_Sepal Length`),
rows = row == 1 & `Versicolor_Sepal Length` > 3
)) %>%
tab_spanner_delim(
delim="_"
)