簡體   English   中英

R 將字典迭代到 function 以獲得多個值

[英]R iterate over a dictionary into a function for multiple values

我正在嘗試創建一個循環(或最有效的方法)來迭代 R(或 Python)中的一系列日歷以發布所有假期(理想情況下是所有工作日。但似乎我可能會設計兩個部分為此-我希望標記周末):目標是擁有一個看起來像的 dataframe:

Country | ISO Code (if available) | Dates
United States of America| US| 12.24.2020
United States of America| US| 12.25.2020
United States of America| US| 01.01.2021
United Kingdom| UK| 12.24.2020
United Kingdom| UK| 12.25.2020
United Kingdom| UK| 01.01.2021

到目前為止我所擁有的:

    require("lattice")
    require("reticulate")
    require("RcppQuantuccia")
    require("tidyverse")
    require("tidytable")

fun_Holidays <- function(cal) {
    setCalendar(cal)
    getHolidays(as.Date("2019-01-01"), as.Date("2030-12-31"))
}
cal_dic <- data.table(calendar=calendars)
as.list(cal_dic)

cal_dic 是 RcppQuantuccia 上所有可用日歷的列表,但如果我運行:

fun_Holidays(cal_dic)

我得到的只是錯誤(因為它不是迭代的):

ERROR: Error in setCalendar(cal): Expecting a single string value: [type=list; extent=1].

我還在 Python 中使用假期 package 對此進行了嘗試,並取得了進一步的進展,但 ISO 代碼不正確 append:

all_holidays = []
country_list = ['Angola','Argentina','Aruba','Australia','Austria','Bangladesh','Belarus','Belgium','Botswana','Brazil',
                'Bulgaria','Burundi','Canada','Chile','China','Colombia','Croatia','Curacao','Czechia','Denmark','Djibouti','DominicanRepublic',
                'Egypt','England','Estonia','Finland','France','Georgia','Germany','Greece','Honduras','HongKong','Hungary','Iceland','India','Ireland','IsleOfMan',
                'Israel','Italy','Jamaica','Japan','Kenya','Korea','Latvia','Lesotho','Lithuania','Luxembourg','Malaysia','Malawi','Mexico','Morocco','Mozambique','Netherlands',
                'Namibia','NewZealand','Nicaragua','Nigeria','NorthernIreland','Norway','Paraguay','Peru','Poland','Portugal','PortugalExt','Romania','Russia','SaudiArabia','Scotland',
                'Serbia','Singapore','Slovakia','Slovenia','SouthAfrica','Spain','Swaziland','Sweden','Switzerland','Turkey','Ukraine','UnitedArabEmirates','UnitedKingdom',
                'UnitedStates','Venezuela','Vietnam','Wales','Zambia','Zimbabwe']
    

for country in country_list:
    for holiday in holidays.CountryHoliday(country, years = np.arange(2018,2030,1)).items():
        all_holidays.append({'date' : holiday[0], 'holiday' : holiday[1], 'country': country, 'code': code})
all_holidays = pd.DataFrame(all_holidays)
all_holidays

    date    holiday country code
0   2018-09-17  Dia do Herói Nacional   Angola  NZ
1   2018-01-01  Ano novo    Angola  NZ
2   2018-03-30  Sexta-feira Santa   Angola  NZ
3   2018-02-13  Carnaval    Angola  NZ
4   2018-02-04  Dia do Início da Luta Armada    Angola  NZ
... ... ... ... ...
14386   2029-08-15  Zimbabwe Heroes' Day    Zimbabwe    NZ
14387   2029-08-13  Defense Forces Day  Zimbabwe    NZ
14388   2029-12-22  Unity Day   Zimbabwe    NZ
14389   2029-12-25  Christmas Day   Zimbabwe    NZ
14390   2029-12-26  Boxing Day  Zimbabwe    NZ
14391 rows × 4 columns

我覺得很奇怪,在 csv 等中沒有按日期按國家/地區划分的假期主列表來幫助時間序列 - 但也許這只是我::)

謝謝!

編輯:我也一直在看: https://workalendar.github.io/workalendar/

因為它擁有最大的國家/地區列表,但它比假期更難使用 - 但如果有人有解決方案將“主日歷”從 workaldendar 中取出,那就太棒了!

使用lapply -

library(RcppQuantuccia)
fun_Holidays <- function(cal) {
  setCalendar(cal)
  getHolidays(as.Date("2019-01-01"), as.Date("2030-12-31"))
}


lapply(calendars, fun_Holidays)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM