9

例の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 numericNAdf[is.na(df)] = ''df$ageformattable 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)

ここに画像の説明を入力

ただし、問題はこのコードにはないようです。

4

2 に答える 2