使用 formattable 过滤数据帧
Filtering dataframes with formattable
示例数据(根据 formattable
github 文档修改):
df <- data.frame(
id = 1:10,
name = c("Bob", "Ashley", "James", "David", "Jenny",
"Hans", "Leo", "John", "Emily", "Lee"),
age = c(48, 47, 40, 28, 29, 29, 27, 27, 31, 30),
test1_score = c(18.9, 19.5, 19.6, 12.9, 11.1, 7.3, 4.3, 3.9, 2.5, 1.6),
test2_score = c(9.1, 9.1, 9.2, 11.1, 13.9, 14.5, 19.2, 19.3, 19.1, 18.8),
stringsAsFactors = FALSE)
您可以像这样使用额外的颜色格式制作漂亮的 table:
library(formattable)
formattable(df, list(
age = color_tile("white", "orange"),
test1_score = color_bar("pink", 0.2),
test2_score = color_bar("pink", 0.2)
))
看起来像这样:
我现在想做的是过滤此 table,这样我只保留前 n 行 - 这里 n=3。不这样做的方法是进行典型的子集化,因为色阶现在只应用于数据子集的 min/max,而不是原始数据。即
formattable(df[1:3,], list(
age = color_tile("white", "orange"),
test1_score = color_bar("pink", 0.2),
test2_score = color_bar("pink", 0.2)
))
看起来像这样:
这显然重新缩放了颜色。
查看对象的str
:
str(
formattable(df, list(
age = color_tile("white", "orange"),
test1_score = color_bar("pink", 0.2),
test2_score = color_bar("pink", 0.2)
))
)
Classes ‘formattable’ and 'data.frame': 10 obs. of 5 variables:
$ id : int 1 2 3 4 5 6 7 8 9 10
$ name : chr "Bob" "Ashley" "James" "David" ...
$ age : num 48 47 40 28 29 29 27 27 31 30
$ test1_score: num 18.9 19.5 19.6 12.9 11.1 7.3 4.3 3.9 2.5 1.6
$ test2_score: num 9.1 9.1 9.2 11.1 13.9 14.5 19.2 19.3 19.1 18.8
- attr(*, "formattable")=List of 4
..$ formatter: chr "format_table"
..$ format :List of 1
.. ..$ :List of 3
.. .. ..$ age :function (x)
.. .. ..$ test1_score:function (x)
.. .. ..$ test2_score:function (x)
..$ preproc : NULL
..$ postproc : NULL
不可能只 filter/subset 生成的对象,因为结构包含其他元素。
有没有办法只输出前 n 行,如果使用整个 table/dataframe,它们将具有的色标?
根据数据框的子集重新缩放是一项设计功能。如果您确实需要避免重新缩放,您可以尝试当前可用的解决方法:
subset_df <- function(m) {
formattable(df[m, ], list(
age = x ~ color_tile("white", "orange")(df$age)[m],
test1_score = x ~ color_bar("pink", 0.2)(df$test1_score)[m],
test2_score = x ~ color_bar("pink", 0.2)(df$test2_score)[m]
))
}
subset_df(1:5)
subset_df(c(1,3,5,9))
subset_df(df$age <= mean(df$age))
它基本上强制每列的格式化程序函数应用于固定数据,并使用相同的子集过滤生成的格式化值。
示例数据(根据 formattable
github 文档修改):
df <- data.frame(
id = 1:10,
name = c("Bob", "Ashley", "James", "David", "Jenny",
"Hans", "Leo", "John", "Emily", "Lee"),
age = c(48, 47, 40, 28, 29, 29, 27, 27, 31, 30),
test1_score = c(18.9, 19.5, 19.6, 12.9, 11.1, 7.3, 4.3, 3.9, 2.5, 1.6),
test2_score = c(9.1, 9.1, 9.2, 11.1, 13.9, 14.5, 19.2, 19.3, 19.1, 18.8),
stringsAsFactors = FALSE)
您可以像这样使用额外的颜色格式制作漂亮的 table:
library(formattable)
formattable(df, list(
age = color_tile("white", "orange"),
test1_score = color_bar("pink", 0.2),
test2_score = color_bar("pink", 0.2)
))
看起来像这样:
我现在想做的是过滤此 table,这样我只保留前 n 行 - 这里 n=3。不这样做的方法是进行典型的子集化,因为色阶现在只应用于数据子集的 min/max,而不是原始数据。即
formattable(df[1:3,], list(
age = color_tile("white", "orange"),
test1_score = color_bar("pink", 0.2),
test2_score = color_bar("pink", 0.2)
))
看起来像这样:
这显然重新缩放了颜色。
查看对象的str
:
str(
formattable(df, list(
age = color_tile("white", "orange"),
test1_score = color_bar("pink", 0.2),
test2_score = color_bar("pink", 0.2)
))
)
Classes ‘formattable’ and 'data.frame': 10 obs. of 5 variables:
$ id : int 1 2 3 4 5 6 7 8 9 10
$ name : chr "Bob" "Ashley" "James" "David" ...
$ age : num 48 47 40 28 29 29 27 27 31 30
$ test1_score: num 18.9 19.5 19.6 12.9 11.1 7.3 4.3 3.9 2.5 1.6
$ test2_score: num 9.1 9.1 9.2 11.1 13.9 14.5 19.2 19.3 19.1 18.8
- attr(*, "formattable")=List of 4
..$ formatter: chr "format_table"
..$ format :List of 1
.. ..$ :List of 3
.. .. ..$ age :function (x)
.. .. ..$ test1_score:function (x)
.. .. ..$ test2_score:function (x)
..$ preproc : NULL
..$ postproc : NULL
不可能只 filter/subset 生成的对象,因为结构包含其他元素。
有没有办法只输出前 n 行,如果使用整个 table/dataframe,它们将具有的色标?
根据数据框的子集重新缩放是一项设计功能。如果您确实需要避免重新缩放,您可以尝试当前可用的解决方法:
subset_df <- function(m) {
formattable(df[m, ], list(
age = x ~ color_tile("white", "orange")(df$age)[m],
test1_score = x ~ color_bar("pink", 0.2)(df$test1_score)[m],
test2_score = x ~ color_bar("pink", 0.2)(df$test2_score)[m]
))
}
subset_df(1:5)
subset_df(c(1,3,5,9))
subset_df(df$age <= mean(df$age))
它基本上强制每列的格式化程序函数应用于固定数据,并使用相同的子集过滤生成的格式化值。