Как получить доступ к значениям в DF, чтобы написать текст с использованием R уценки? - PullRequest
0 голосов
/ 28 апреля 2020

У меня обработанный фрейм данных следующим образом (штатное расписание отличается для разных еженедельных отчетов):

enter image description here

df <- structure(list(Department = c("DP1", "DP1", "DP2", "DP2", "DP2", 
"DP4"), `Staff Name` = c("Bray Laura", "Fognani Mikaela", "Despain Taylor", 
"Housum Zachary", "Herman Trenton", "Burgette Lesley"), `Non-compliance Criteria` = c("0 temperature reporting for >/= 3 days", 
"0 temperature reporting for 2 consecutive readings", "0 temperature reporting for 2 consecutive readings", 
"0 temperature reporting for 2 consecutive readings", "0 temperature reporting for 2 consecutive readings", 
"1 temperature reporting/day for >/= 5 days")), row.names = c(NA, 
6L), class = "data.frame")

Есть 4 фиксированных значения в Department:

  1. DP1
  2. DP2
  3. DP3
  4. DP4

И 3 фиксированных значения в Non-compliance Criteria:

  1. 0 temperature reporting for >/= 3 days
  2. 0 temperature reporting for 2 consecutive readings
  3. 1 temperature reporting/day for >/= 5 days

Список Staff Name будет отличаться для разных еженедельных отчетов.

Я хотел бы вывести тексты с уценкой R следующим образом:

enter image description here

I wi sh, чтобы получить доступ к значениям в кадре данных и записать их в виде текста и маркеров. Таким образом, в Department мы покажем список сотрудников, которые не соответствуют требованиям, и каким критериям они соответствуют. Если в пределах Department,> 1 сотрудник соответствует тем же критериям, мы свернем их с помощью «,» и «и», как показано в примере «DP2».

Я застрял после этого:

non_compliants <- df %>% 
  group_by(Department, `Non-compliance Criteria`) %>% 
  summarise(Text = paste(paste(`Staff Name`, collapse = " and "), "had", unique(`Non-compliance Criteria`))) %>% 
  ungroup()

lapply(c("DP1", "DP2", "DP3", "DP4"),
       function(x){
         ifelse(dim(filter(non_compliants, Department == x))[1] == 0, 
                "NA", 
                non_compliants$Text[non_compliants$Department == x])})

Ответы [ 2 ]

2 голосов
/ 28 апреля 2020

используя pander для вывода списка маркеров

Код выглядит так:


non_compliants <- df %>% 
  group_by(Department, `Non-compliance Criteria`) %>% 
  summarise(Text =paste("*", paste(paste(`Staff Name`, collapse = " and "), "had", unique(`Non-compliance Criteria`)))) %>% 
  ungroup()

non<-non_compliants %>% 
  group_by(Department) %>%
  summarise(messages= paste(Text, collapse = " \n "))

library(pander)
panderOptions("list.style", 'bullet')


non %>% pander(keep.line.breaks = TRUE,style = 'grid', justify = 'left')



enter image description here

1 голос
/ 28 апреля 2020

Нам нужна строка символов, которая имитирует синтаксис уценки ... Итак, вы можете сделать это в своем Rmarkdown:

persons <- sapply(c("DP1", "DP2", "DP3", "DP4"),
       function(x){
         ifelse(dim(filter(non_compliants, Department == x))[1] == 0, 
                "NA", 
                non_compliants$Text[non_compliants$Department == x])})

text <- sapply(names(persons), 
               FUN = function(person){

                 paste("###", person, "\n\n", persons[person], "\n")

               }) %>% paste(collapse = "\n")


# not run
cat(text)
# ### DP1 
# 
# Bray Laura had 0 temperature reporting for >/= 3 days 
# 
# ### DP2 
# 
# Despain Taylor and Housum Zachary and Herman Trenton had 0 temperature reporting for 2 consecutive readings 
# 
# ### DP3 
# 
# NA 
# 
# ### DP4 
# 
# Burgette Lesley had 1 temperature reporting/day for >/= 5 days 

(внутри чанка)

Тогда просто поместите `r text` в вашу уценку. Это сделает ваш желаемый результат.

...