【问题标题】:How to import ical .ics file in R如何在 R 中导入 ical .ics 文件
【发布时间】:2017-09-20 07:15:16
【问题描述】:

我想将.ics file 导入 R,但是,当我尝试这样做时...

sneak_cal <- read.delim("iCal-TribeEvents.ics", sep = ":", header=FALSE, stringsAsFactors = FALSE, strip.white = TRUE, na.strings = "")

...我最终也拆分了网站的字符串(属于X-ORIGINAL-URLUID字段),这是不可取的

https//www.kicksonfire.com

最终目标是将数据整理成一种整齐的格式,其中每一行代表一个VEVENT,我认为它会由一个唯一的UID 表示,而不会丢失任何信息(例如URL)

是否有其他推荐的方法,例如预定义预期作为键的字段并将值或空白空间与该键匹配?由于.ics 文件每次都具有相同的预期字段,因此使用这些字段作为模板来读取数据似乎是有意义的,但我不知道该怎么做。

【问题讨论】:

    标签: r dplyr icalendar tidyverse


    【解决方案1】:

    这是一个例子

    x <- readLines("https://www.kicksonfire.com/releases/?ical=1&tribe_display=list", warn = FALSE)
    stopifnot(!any(grepl("^\\s+", x))) # disregarding value fields that have linefeeds for the sake of simplicity 
    keyval <- do.call(rbind, regmatches(x, regexpr(":", x, fixed = TRUE), invert = TRUE))
    keyval <- keyval[which.max(keyval[,1]=="BEGIN" & keyval[,2]=="VEVENT"):tail(which(keyval[,1]=="END" & keyval[,2]=="VEVENT"), 1),]
    keyval <- cbind.data.frame(keyval, id=cumsum(keyval[,1]=="BEGIN" & keyval[,2]=="VEVENT"))
    df <- reshape(keyval, timevar="1", idvar="id", direction = "wide")
    head(df[,c(3,4,9)])
    #    2.DTSTART;VALUE=DATE 2.DTEND;VALUE=DATE                              2.SUMMARY
    # 1              20170422           20170423         Air Jordan 11 Low GS Blue Moon
    # 14             20170422           20170423     Air Jordan 5 Premium Pure Platinum
    # 27             20170427           20170428              Nike Air VaporMax Asphalt
    # 40             20170427           20170428                 Nike Air VaporMax Oreo
    # 53             20170427           20170428  Nike WMNS Air VaporMax White Ice Blue
    # 66             20170427           20170428 wings+horns x adidas NMD R2 Light Grey
    

    【讨论】:

      【解决方案2】:

      现在可用的更简单、更强大的选项是 CRAN 上的 calendar 包(文档 here)。从 ICS 文件导入数据框只需一行代码,创建新事件然后导出到新 ICS 文件也很简单。

      【讨论】:

        猜你喜欢
        • 2012-03-13
        • 2018-03-19
        • 1970-01-01
        • 1970-01-01
        • 2013-12-15
        • 2015-09-23
        • 1970-01-01
        • 1970-01-01
        • 2010-09-22
        相关资源
        最近更新 更多