Dplyrを使用してデータフレームをループし、mutateを使用して、条件に基づいて一部のセルの値を変更するにはどうすればよいですか?

パウロバロス

Rmarkdownを使用してレポートを作成していますが、次のようなデータフレームがあります。

ここに画像の説明を入力してください

すべてのセルをチェックしてマークアップを変更し、「0.05」より小さい値が赤で強調表示されるようにします。2行と特定のセルしかない単純なデータフレームでそれを行うことができたので、簡単で機能していました。しかし、この場合、すべてのセルをチェックする必要があり、その方法がわかりません。mutate_if、mutate_allを試してみましたが、どこにも行きません。

この行は、他のデータフレームで機能させるために必要なすべてでした。

mutate(p.value = cell_spec(p.value, "html", color = ifelse(p.value[1] < 0.05, "red", "black")))

編集:要求に応じて。

KableとKableExtraを使用して、レポートの印刷の一部を実行しています。これは、より基本的なデータフレームで強調表示を行うために使用したコード例です。

aov.formiga <- aov(as.formula(sprintf("%s ~ Local", v)), formigas)
  d <- tidy(aov.formiga)
    print(
      d %>%
        replace(is.na(.),"") %>%
        mutate(p.value = cell_spec(p.value, "html", color = ifelse(p.value[1] < 0.05, "red", "black"))) %>%
        kable(format = "html", escape = F, col.names = c("Source", "DF","Anova SS", "Mean Square", "F Value", "Pr > F")) %>%
        kable_styling(bootstrap_options = c("striped", "hover"), full_width = F)
      )

これがこの印刷の結果です。

ここに画像の説明を入力してください

私はどんなデータでも提供できますが、アイデアを単純化することを試みることができます:

DF 
... A B C
1   1 2 1
2   2 1 2
3   3 4 1

このDFをループして、すべて1を「One」に置き換え、他の値はそのままにしておきたいとします。Dplyrでそれができれば、他の部分でも作業できると思います。ありがとうございました!

ユージンチョン

サンプルデータで、2以上のすべてのセルを赤に変えたい場合:

x = c(A = 1, B = 2, C = 1)
y = c(A = 2, B = 1, C = 2)
z = c(A = 3, B = 4, C = 1) 
data=data.frame(rbind(x,y,z))

library(knitr)
library(kableExtra)
library(tidyverse)

data %>% 
    mutate_all(~cell_spec(.x, color = ifelse(.x >= 2, "red"," black"))) %>%
    kable(escape = F) %>%
    kable_styling()

ここに画像の説明を入力してください

コメントへの回答

ifelse()休憩NAの値は、私たちは使用することができますcase_when()

data %>% 
    mutate_all(~cell_spec(.x, color = case_when(.x >= 2 ~ "red",
                                                TRUE ~ "black"))) %>%
    kable(escape = F) %>%
    kable_styling()

ここに画像の説明を入力してください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ