r语言 - 疯狂地循环列表和拆分数据帧,同时发送电子邮件. 90%在那里. 需要最后的推动



我有一个项目数据帧

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"]] = "ibell@cicerogroup.com"
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 想知道除了他的项目之外,他的团队时间在哪里分配。

虽然确切的问题对我来说不是很清楚,但我认为这就是你要找的。将其插入第一个 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 =" "))

最新更新