在发送电子邮件时疯狂循环遍历列表和拆分数据框。那里有90%..需要最终推动

问题描述 投票:0回答:1

我有一个项目数据框

dummy <- data.frame("lead" = c("Sammy", "Dan", "Lawrence", "Sammy", "Dan", "Lawrence", "Lawrence", "Sammy"),
           "project" = c("project4", "project2", "project3", "project4", "project1",
                         "project2", "project1", "project3"), 
           "member" = c("John", "Allen", "Jacob", "Bob", "John", 
                        "John", "Allen", "Jacob"),
           "hours" = c(25, 30, 15, 20, 15, 34, 24, 35))

将得到以下结果:

 lead  project member hours
1    Sammy project4   John    25
2      Dan project2  Allen    30
3 Lawrence project3  Jacob    15
4    Sammy project4    Bob    20
5      Dan project1   John    15
6 Lawrence project2   John    34
7 Lawrence project1  Allen    24
8    Sammy project3  Jacob    35

然后我将这个数据帧拆分为leadmember

grouping <- dummy$lead
split_dum1 <- split(dummy, grouping)
grouping2 <- dummy$member
split_dum2 <- split(dummy, grouping2)

目标是这样:

  1. 获取列表中的第一个数据框
  2. 将其放入可以嵌入到Outlook中并作为电子邮件发送的html表中

我已经知道了这部分。

for (i in 1:length(split_dum1)) {

  df_html <- print(xtable(split_dum1[[i]]), type = "html", print.results=FALSE, 
                   include.rownames = FALSE

下一个目标:

  1. 在split_dum1中获取第一个数据帧,并拉出member列的第一项。
  2. 基于此名称,从split_dum2中提取数据框,该数据框总结了该成员正在参与的所有项目。
  3. member的此数据框放入一个表中,该表可以与上一项放置在同一电子邮件中。

我也已经弄清楚了。目标两个部分的整个循环。

for (i in 1:length(split_dum1)) {

  df_html <- print(xtable(split_dum1[[i]]), type = "html", print.results=FALSE, 
                   include.rownames = FALSE)
  employee_df <- list()

  for (j in 1:nrow(split_dum1[[i]])) {
    employee <- split_dum1[[i]]$Employee[j]
    employee_df <- ra_user20[ra_user20$Employee == employee,]

    df_html2[j] <- print(xtable(employee_df), type = "html", print.results=FALSE, 
                    include.rownames = FALSE)    
  }

  body <- paste0("<html>", df_html, "</html>")
  body3 <- paste0("<html>", df_html2, "</html>")
  body2 <- paste0("<p>", "Please see the table below for your assigned
                  project hours next week.", "</p>", body, body3)

  OutApp <- COMCreate("Outlook.Application")
  outMail = OutApp$CreateItem(0)
  outMail[["To"]] = "[email protected]"
  outMail[["subject"]] = paste0("Assigned Hours Over the Next 4 weeks")
  outMail[["HTMLbody"]] = body2
  ## send it
  outMail$Send()
}

上面的代码打印出2个表格并发送多封电子邮件。我需要每个项目负责人发送一封电子邮件。

这里的主要目标是向项目负责人发送表格,告知他们的项目以及谁被分配(这项工作)。第二部分是发送表格,以显示团队中的成员是否也被预订其他项目,以及这些项目是什么。

在电子邮件正文中看起来像这样:

lead  project member hours
1 Sammy project4   John    25
2 Sammy project4    Bob    20


     lead  project   member hours
1    Sammy project4   John    25
2      Dan project1   John    15
3 Lawrence project2   John    35

     lead  project   member hours
1    Sammy project4   Bob    20

同样,这些都应该出现在一封电子邮件中。

Sammy想知道除了他的项目以外,他的团队的工作时间分配在哪里。

r list loops for-loop
1个回答
0
投票

尽管确切的询问对我来说还不是很清楚,但我认为这就是您想要的。将此插入第一个for循环。显然,您不需要print(df_html2),但您应该知道如何处理输出以进入电子邮件。

df_html2 <- character(nrow(split_dum1[[i]]))
for(j in 1:nrow(split_dum1[[i]])){
  employee <- split_dum1[[i]]$member[j]
  employee_df <- dummy[dummy$member == employee,]
  df_html2[j] <- print(xtable(employee_df), type = "html", print.results=FALSE, 
                    include.rownames = FALSE) 
}

print(df_html2)

并处理body3的可变长度,请尝试:

body2 <- paste0("<p>", "Please see the table below for your assigned
                  project hours next week.", "</p>", body, paste(body3,collapse =" "))
© www.soinside.com 2019 - 2024. All rights reserved.