如何从 R 中的字符向量中进行更简洁的提取?
How do I make a more concise extraction from a character vector in R?
我们使用 google 日历来预订多台机器,我正在绘制使用情况图表。我有一行来提取用于绘图的日历的标题,但它看起来相当长和笨重,使用 grep 两次(一次用于日历名称的索引,一次用于提取日历的名称)。我不想假设日历的名称将始终位于同一索引处。日历数据作为 .ics 文件下载并使用 read_lines() 从 tidyverse 导入。有没有更简洁的获取日历名称的方法?
> calendar_raw[1:20]
[1] "BEGIN:VCALENDAR"
[2] "PRODID:-//Google Inc//Google Calendar 70.9054//EN"
[3] "VERSION:2.0"
[4] "CALSCALE:GREGORIAN"
[5] "METHOD:PUBLISH"
[6] "X-WR-CALNAME:Calendar Name"
[7] "X-WR-TIMEZONE:America/Los_Angeles"
[8] "X-WR-CALDESC:Schedule for the machine"
[9] "BEGIN:VEVENT"
[10] "DTSTART:20180223T210000Z"
[11] "DTEND:20180223T220000Z"
[12] "DTSTAMP:20220421T162943Z"
[13] "UID:unimportant@google.com"
[14] "CREATED:20180222T195641Z"
[15] "DESCRIPTION:"
[16] "LAST-MODIFIED:20180222T200100Z"
[17] "LOCATION:"
[18] "SEQUENCE:0"
[19] "STATUS:CONFIRMED"
[20] "SUMMARY:Username"
> gsub("X-WR-CALNAME:(.*$)","\1", calendar_raw[grep("X-WR-CALNAME:",calendar_raw)])
[1] "Calendar Name"
你还需要grep包含X-WR-CALNAME:
的字符向量,然后删除它,所以你有就可以了。
你能做的是
- 使用
sub
因为您只使用一个搜索和替换操作
- 您的正则表达式中不需要
$
,并且您确实不需要使用 X-WR-CALNAME:
之后的其余字符串以稍后使用 </code> 反向引用进行恢复。如果一定要留下来,就不要消耗它,<code>sub
操作不会触及它。
因此您可以使用
sub("^X-WR-CALNAME:", "", calendar_raw[grep("X-WR-CALNAME:", calendar_raw)])
我们使用 google 日历来预订多台机器,我正在绘制使用情况图表。我有一行来提取用于绘图的日历的标题,但它看起来相当长和笨重,使用 grep 两次(一次用于日历名称的索引,一次用于提取日历的名称)。我不想假设日历的名称将始终位于同一索引处。日历数据作为 .ics 文件下载并使用 read_lines() 从 tidyverse 导入。有没有更简洁的获取日历名称的方法?
> calendar_raw[1:20]
[1] "BEGIN:VCALENDAR"
[2] "PRODID:-//Google Inc//Google Calendar 70.9054//EN"
[3] "VERSION:2.0"
[4] "CALSCALE:GREGORIAN"
[5] "METHOD:PUBLISH"
[6] "X-WR-CALNAME:Calendar Name"
[7] "X-WR-TIMEZONE:America/Los_Angeles"
[8] "X-WR-CALDESC:Schedule for the machine"
[9] "BEGIN:VEVENT"
[10] "DTSTART:20180223T210000Z"
[11] "DTEND:20180223T220000Z"
[12] "DTSTAMP:20220421T162943Z"
[13] "UID:unimportant@google.com"
[14] "CREATED:20180222T195641Z"
[15] "DESCRIPTION:"
[16] "LAST-MODIFIED:20180222T200100Z"
[17] "LOCATION:"
[18] "SEQUENCE:0"
[19] "STATUS:CONFIRMED"
[20] "SUMMARY:Username"
> gsub("X-WR-CALNAME:(.*$)","\1", calendar_raw[grep("X-WR-CALNAME:",calendar_raw)])
[1] "Calendar Name"
你还需要grep包含X-WR-CALNAME:
的字符向量,然后删除它,所以你有就可以了。
你能做的是
- 使用
sub
因为您只使用一个搜索和替换操作 - 您的正则表达式中不需要
$
,并且您确实不需要使用X-WR-CALNAME:
之后的其余字符串以稍后使用</code> 反向引用进行恢复。如果一定要留下来,就不要消耗它,<code>sub
操作不会触及它。
因此您可以使用
sub("^X-WR-CALNAME:", "", calendar_raw[grep("X-WR-CALNAME:", calendar_raw)])