У меня есть список элементов. Я хочу экспортировать этот список в виде файла Excel, при этом каждый элемент экспортируется как отдельный лист в одном и том же файле Excel. Excel имеет ограничение в 31 символ для имен листов. Таким образом, приведенный ниже экспорт не будет работать.

Есть ли способ ограничить символы списка с помощью функции? Например, обрезать все имена элементов до 30 символов?

employee <- c('John Doe','Peter Gynn','Jolie Hope')
salary <- c(21000, 23400, 26800)
startdate <- as.Date(c('2010-11-1','2008-3-25','2007-3-14'))

test1 <- list(employee, salary, startdate)

names(test1)[1] <- "employee of the month 2021 to 2022"
names(test1)[2] <- "salary of the best employees of test company"
names(test1)[3] <- "startdate"

write.xlsx(test1, file = "testlist.xlsx")

Tia

1
J.Doe 4 Фев 2022 в 10:40

2 ответа

Функция substr будет работать.

> substr("salary of the best employees of test company", start = 1, stop = 30)
[1] "salary of the best employees o"
0
Roman Luštrik 4 Фев 2022 в 10:51
Спасибо. Есть ли способ создать функцию с этим для применения ко всем элементам в списке? Мои рабочие данные содержат гораздо больше элементов
 – 
J.Doe
4 Фев 2022 в 11:18

При таком подходе вы можете сэкономить место, определив список стоп-слов, чтобы оставалось больше места для осмысленных имен листов. Пример включает изменение ваших имен в вашем списке test1. Либо держите слова в такт, либо обрезайте слова "на полпути".

library(stringi)

# remove words without much meaning, add what you like
stopwords <- c("of", "the", "to")

names(test1) <- unlist(lapply(names(test1), function (x){
  x <- stri_extract_all_words(x)[[1]]
  x <- paste(x[!x %in% stopwords], collapse = " ")
  # strwrap(x, width = 30)[1] # keep words in tact
  substr(x, start = 1, stop = 30)
}))

names(test1)

# strwrap uncommented
# [1] "employee month 2021 2022"   "salary best employees test" "startdate"

# substr uncommented
# [1] "employee month 2021 2022"        "salary best employees test com" "startdate" 

# compare that to the outcome without removing stopwords
# [1] "employee of the month 2021 to " "salary of the best employees o" "startdate" 
0
Merijn van Tilborg 4 Фев 2022 в 15:31
Спасибо. Когда я запускаю скрипт, я получаю эту ошибку: «Ошибка в stri_extract_all_words (x): не удалось найти функцию «stri_extract_all_words»». Есть ли что-то, что мне не хватает?
 – 
J.Doe
4 Фев 2022 в 12:54
Это часть library(stringr)
 – 
Merijn van Tilborg
4 Фев 2022 в 13:08
Посылка была уже загружена, странно. Любые идеи о том, как я могу это исправить?
 – 
J.Doe
4 Фев 2022 в 14:46
Мои извинения, я использовал stringi, но неправильно загрузил stringr вместо этого в опубликованном ответе. Починил это.
 – 
Merijn van Tilborg
4 Фев 2022 в 15:31