例のdata.frameを考えてみましょう
df <- data.frame(
id = 1:4,
name = c("Bob", "Ashley", "James", "David"),
age = c(48, NA, 40, 28),
test1_score = c(18.9, 19.5, NA, 12.9),
stringsAsFactors = FALSE)
R パッケージ formattable を使用してきれいなテーブルを作成しています。
library(formattable)
formattable(df, list(
age = color_tile("white", "orange"),
test1_score = color_bar("pink", 'proportion', 0.2)
))
以前は NA が自動的に印刷されず、代わりに空白が印刷されていました。これはもはやデフォルトではないようですが、NA の空白を印刷したいと思います。NA を次のように置き換えると、次のように機能します。
df[is.na(df)]=''
formattable(df, list(
age = color_tile("white", "orange"),
test1_score = color_bar("pink", 'proportion', 0.2)
))
ただし、列の1つを強制的に小数点以下2桁にフォーマットしようとすると、厄介なNAが返されます。
df$age = digits(df$age, digits=2)
formattable(df, list(
age = color_tile("white", "orange"),
test1_score = color_bar("pink", 'proportion', 0.2)
))
NAをもう一度削除すると、NAは消えますが、小数点以下も消えます
df[is.na(df)] = ''
formattable(df, list(
age = color_tile("white", "orange"),
test1_score = color_bar("pink", 'proportion', 0.2)
))
その理由は、数字がオブジェクトに変換され、が作成df$age
され、オブジェクトに変換されるためだと思います。formattable numeric
NA
df[is.na(df)] = ''
df$age
formattable character
> df$age = digits(df$age, digits=2)
> df$age
[1] 48.00 NA 40.00 28.00
> class(df$age)
[1] "formattable" "numeric"
> df[is.na(df)] = ''
> df$age
[1] "48" " " "40" "28"
> class(df$age)
[1] "formattable" "character"
解決策に関するアイデアはありますか?
最終的には、フィルタリングされた data.frame でこれを使用したいと思います。ここでは、 data.frame をフィルタリングするときにカラー スケールが同じままであることを確認するために、formattable でデータフレームをフィルタリングするのコードを使用します。
df$age = digits(df$age, digits=2)
subset_df <- function(m) {
formattable(df[m, ], list(
age = x ~ color_tile("white", "orange")(df$age)[m],
test1_score = x ~ color_bar("pink", 'proportion', 0.2)(df$test1_score)[m],
test2_score = x ~ color_bar("pink", 'proportion', 0.2)(df$test2_score)[m]
))
}
subset_df(1:3)
ただし、問題はこのコードにはないようです。