在 R 中的 HTML 表格中排列数据

use*_*845 6 r html-table dataframe

我有一个下面提到的数据框:

DF(输出):

structure(list(ID = c("P-1", " P-1", 
    "P-1", "P-2", "P-3", "P-4", 
    "P-5", "P-6", "P-7", "P-8"
    ), Date = c("2020-03-16 12:11:33", "2020-03-16 13:16:04", 
    "2020-03-16 06:13:55", "2020-03-16 10:03:43", "2020-03-16 12:37:09", 
    "2020-03-16 06:40:24", "2020-03-16 09:46:45", "2020-03-16 12:07:44", 
    "2020-03-16 14:09:51", "2020-03-16 09:19:23"), Status = c("SA", 
    "SA", "SA", "RE", "RE", "RE", 
    "RE", "XA", "XA", "XA"), Flag2 = c("L", 
    "L","L", NA, "K", "J", NA, NA, "H", "G"), Value = c(5929.81, 
    5929.81, 5929.81, NA, 6969.33, 740.08, NA, NA, 1524.8, NA), Flag2 = c("CL", 
    "CL", "CL", NA, "RY", "", NA, NA, "", NA), Flag3 = c(NA, NA, 
    NA, NA, "RI", "PO", NA, "SS", "DDP", NA)), .Names = c("ID", 
    "Date", "Status", "Flag", "Value", 
    "Flag2", "Flag3"), row.names = c(NA, 10L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)

我正在使用下面提到的代码:

    df %>% mutate(L = ifelse(Flag == "L",1,0),
                  K = ifelse(Flag == "K",1,0),
                  # etc for Flag) %>%
      mutate(sub_status = NA) %>%
      mutate(sub_status = ifelse(!is.na(Flag2) & Flag3 == 0, "a", sub_status),
             sub_status = ifelse(is.na(Flag2) & Flag3 != 0, "b", sub_status),
             # etc for sub-status) %>%
      mutate(value_class = ifelse(0 <= Value & Value <= 15000, "0-15000", "15000-50000")) %>%
      group_by(Date, status, sub_status, value_class) %>%
      summarise(L = sum(L),
                K = sum(K),
                # etc
                count = n())
Run Code Online (Sandbox Code Playgroud)

这为我提供了以下输出:

    Date         Status  sub_status   value_class G H I J K L NA Count
    2020-03-20   SA      a            0-15000     0 0 0 0 1 1 0  2
    2020-03-20   SA      b            0-15000     0 0 0 0 1 0 0  1
    ................
    ................
Run Code Online (Sandbox Code Playgroud)

我想使用 获得以下输出DF,其中该Status列具有不同的 3 个值并且Flag2具有值或 [null] 或 NA,最后该Flag3列具有具有 [null] 或 NA 的不同 7 个值。对于一个不同IDFlag3列,我们有多个条目。

我需要通过基于Value0-15000、15000-50000创建 3 个组来创建以下数据框。

  • 如果一个不同的 IDFlag2具有除 0 或 [null]/NA 以外的某个值但Flag3具有值 0 或 [null]/NA,那么它将是a.
  • 如果一个不同的 IDFlag3具有除 0 或 [null]/NA 以外的某个值但Flag2具有值 0 或 [null]/NA 那么它将是b
  • 如果对于一个不同的 ID 两者Flag2&Flag3都具有除 0 或 [Null]/NA 以外的某个值,那么它将是c
  • 如果对于不同的 ID,Flag2& 的Flag3值都为 0 或 [Null]/NA,则它将是d

计数将是一个不同的 group by ID。此外,对于第一行(Status即 SA、RE 等开始的地方),percentage将根据Total状态计数计算 sub_status(即 a、b、c 等)的百分比和以下百分比。

我想将上述 datafrmae 安排在以下结构中,percentTotal以 html 表格格式的列排列,可以使用 mailR 库将其附加到电子邮件中。

我正在使用代码:

    library(tableHTML)

    html_table<-df %>% tableHTML(rownames = FALSE,
                                      widths = rep(120, 10),
                                      caption = "XYZ (System Date)") %>%
      add_css_caption(css = list(c("font-weight", "border","font-size"),
                                 c("bold", "1px solid black","16px")))%>% 
      add_css_row(css = list(c("background-color"), c("lightblue")), rows = 0:1)%>%
      add_css_caption(css = list(c("background-color"), c("lightblue")))
Run Code Online (Sandbox Code Playgroud)
    20/03/2020                 0 - 15000                         15000 - 50000
Status      count   percent  L K J H G [Null] count   percent  L K J H G [Null]   Total
SA            2      2/4     1 1 0 0 0   1      2              0 0 1 1 0    0       4
a             1      1/2     0 1 0 0 0   0      0              0 0 0 0 0    0       1
b             0       -      0 0 0 0 0   0      0              0 0 0 0 0    0       0
c             1      1/2     1 0 0 0 0   0      2              0 0 1 1 0    0       3
d             0       -      0 0 0 0 0   0      0              0 0 0 0 0    0       0
RE            2      2/5     0 0 0 0 1   1      0              0 0 0 0 0    0       2
a             1              0 0 0 0 1   0      0              0 0 0 0 0    0       1
b             1              0 0 0 0 0   1      0              0 0 0 0 0    0       1
c             0              0 0 0 0 0   0      0              0 0 0 0 0    0       0
d             0              0 0 0 0 0   0      0              0 0 0 0 0    0       0
XA            1              0 0 0 0 0   1      0              0 0 0 0 0    0       1
a             0              0 0 0 0 0   0      0              0 0 0 0 0    0       0
b             0              0 0 0 0 0   0      0              0 0 0 0 0    0       0
c             0              0 0 0 0 0   0      0              0 0 0 0 0    0       0
d             1              0 0 0 0 0   1      0              0 0 0 0 0    0       1
Total         5              1 1 0 0 1   3      2              0 0 1 1 0    0       7
Run Code Online (Sandbox Code Playgroud)

我已经提到了基于 20/03/2020 的最新日期所需的输出,如果数据帧没有最新日期startdate,则在输出数据帧中保留所有值 0。百分比列仅供参考,将计算百分比值。

另外,我想保持结构静态。例如,如果一天内没有任何参数存在,则输出结构将与 0 值相同。

例如,假设日期 17/03/2020 没有任何状态为 SA 或 sub_status c 的行,其占位符将出现在输出中,值为 0。

注意:所需的输出仅用于格式透视图。这些数字可能与dputdf不匹配。