Правая Обоснуйте Колонку в R - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь выровнять столбцы «Видимость» и «Мошенничество» по правой стороне ячейки, но не могу найти простой способ сделать это. Я пробовал несколько разных вариантов, но все возвращает ошибки. Пожалуйста, смотрите мой код ниже:

library(tidyverse)
library(xlsx)
library(openxlsx)
library(data.table)
library(taskscheduleR)

#Create Workbook

workbook <- createWorkbook()
addWorksheet(workbook, "Viewability")
addWorksheet(workbook, "Fraud")

#Read Files and Create Data

files <- file.info(Sys.glob("C:/Users/briantos/Documents/Blacklist Raw/*.csv"))
newestfile <- row.names(files)[which.max(files[["ctime"]])]
blacklist <- fread(newestfile)

#Create Viewability Data

blacklist_viewability <- blacklist %>% 
  select(`Delivery Site`, `Video Viewable Impressions`, `Measured Impressions`) %>% 
  group_by(`Delivery Site`) %>% 
  summarize(Sum_of_Measured_Impressions = sum(`Measured Impressions`, na.rm = TRUE),
            Sum_of_Video_Viewable_Impressions = sum(`Video Viewable Impressions`, na.rm = TRUE)) %>% 
  mutate(Viewability = `Sum_of_Video_Viewable_Impressions`/`Sum_of_Measured_Impressions`) %>%
  arrange(Viewability, desc(Sum_of_Measured_Impressions)) %>% 
  select(-Sum_of_Video_Viewable_Impressions) %>% 
  mutate(Viewability = paste(round(100*Viewability, 2), "%", sep=""))

#Create Fraud Data

blacklist_fraud <- blacklist %>% 
  select(`Delivery Site`, `Fraud/SIVT Incidents`, `Monitored Impressions`) %>% 
  group_by(`Delivery Site`) %>% 
  summarize(Sum_of_Monitored_Impressions = sum(`Monitored Impressions`, na.rm = TRUE),
            Sum_of_Incidents = sum(`Fraud/SIVT Incidents`, na.rm = TRUE)) %>% 
  mutate(Fraud = `Sum_of_Incidents`/`Sum_of_Monitored_Impressions`) %>%
  arrange(desc(Fraud), desc(Sum_of_Monitored_Impressions)) %>% 
  select(-Sum_of_Incidents) %>% 
  mutate(Fraud = paste(round(100*Fraud, 2), "%", sep=""))

#Turn Into Data Frame

blacklist_viewability <- as.data.frame(blacklist_viewability)
blacklist_fraud <- as.data.frame(blacklist_fraud)

#Write Data into Workbook

writeData(workbook, sheet = "Viewability", blacklist_viewability)
writeData(workbook, sheet = "Fraud", blacklist_fraud)

#Set Column Widths

setColWidths(workbook, sheet = "Viewability", cols = 1:3, widths = "auto")
setColWidths(workbook, sheet = "Fraud", cols = 1:3, widths = "auto")

#Write File

saveWorkbook(workbook, paste("C:/Users/briantos/Documents/Blacklist Complete/",Sys.Date(),"_Blacklist.xlsx"))## Heading ##

Я пробовал функцию alignment(), функцию CellStyle() и т. Д. Все они возвращают ошибки. Пожалуйста, помогите!

1 Ответ

0 голосов
/ 10 января 2019

Вот пример использования openxlsx. То, что вы ищете, это аргументы halign;valign в методе createStyle.

library(openxlsx)
wb <- createWorkbook()
wb$addWorksheet('test')
wb$writeData(sheet = 'test', 
             df = cbind.data.frame(matrix(1:9,3,3), let=letters[1:3]), 
             colClasses = c(rep('integer',3),'character'), keepNA = TRUE,
             colNames = TRUE, startRow = 1L, startCol = 1L)
wb$addStyle(sheet = 1, rows = 1:4, cols = 4L, 
            style = createStyle(halign = 'right'))  # set halign='right' - leave every other element to default value
saveWorkbook(wb,'d:/Test/test_wb.xlsx') # last column is right-aligned

Вы также можете просто сделать что-то в форме

addStyle(wb = wb, sheet = 'test', cols = 4L, rows = 1:4, 
         style = createStyle(halign = 'right'))

Редактировать

Выбор строк / столбцов: я обычно работаю с df (фрейм данных рассматриваемого листа) и четко определяю, где я хочу применить форматирование

# Ex. 1: all rows, column 4
addStyle(wb = wb, sheet = 'test', cols = 4L, rows = 1:nrow(df), 
         style = createStyle(halign = 'right'))

# Ex. 2: all rows, all columns
addStyle(wb = wb, sheet = 'test', cols = 1:ncol(df), rows = 1:nrow(df),
         gridExpand = TRUE, # make sure to set this to TRUE in order to really select everything
         style = createStyle(halign = 'right'))

Тогда вы можете так же легко выбрать группы строк или столбцов, например, rows = c(1,3) (вы также можете просто установить максимальное количество столбцов и строк, но я думаю, что применение форматирования к каждой отдельной ячейке не очень эффективно).

Кроме того, если ваши данные начинаются не с строки / столбца с номером 1, а с n, то вам необходимо сместить выбор, например, rows = n:(nrow(df)+n-1) (возможно, потребуется удалить -1 - не уверен. Я всегда ошибаюсь здесь).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...