R中变量名的正则表达式(重新格式化数据集)

时间:2018-11-26 00:27:36

标签: r string dplyr

我正在使用yelp数据集。变量名称的格式为“ day.hour”。因此,Fri.4表示星期五凌晨4点,Fri.22表示星期五晚上10点,变量值为当时的签入次数。

我想创建一个有7条线的图。每行代表一周中的一天,而每行则显示一天中每小时的平均签到趋势。因此,每条线连接24个点,而我有7条线。

有帮助吗?

我会使用dplyr,但无法弄清楚如何将所有星期一变量和星期二变量放在一起,等等,因为名称类似于Tue.01Tues.02等。 ...如何对字符串进行操作?

我当前的数据集如何格式化: 我的数据集是1x168(每个变量是date.time)

Fri.0 114.35897
Sat.0 154.92308
Sun.0 153.96154
Wed.0 93.92308
Fri.1 124.29487
Sat.1 168.07692
Thu.1 105.96154
Wed.1 101.85897
Sat.2 175.00000
Sun.2 157.48718
Thu.2 105.97436
Wed.2 97.08974
Fri.3 108.46154
Sun.3 145.24359

enter image description here

1 个答案:

答案 0 :(得分:1)

这可以通过直接插入ggplot的简单管道来完成,无需在工作日group_byggplot2美观aes(colour = .)进行分组。 / p>

library(dplyr)
library(stringr)
library(ggplot2)

dh %>%
  mutate(Weekday = str_extract(day.hour, "^[[:alpha:]]{3}"),
         Day = as.integer(str_extract(day.hour, "[[:digit:]]*$"))) %>%
  ggplot(aes(x = Day, y = value, colour = Weekday)) +
  geom_line()

enter image description here

数据。

dh <- read.table(text = "
Fri.0 114.35897
Sat.0 154.92308
Sun.0 153.96154
Wed.0 93.92308
Fri.1 124.29487
Sat.1 168.07692
Thu.1 105.96154
Wed.1 101.85897
Sat.2 175.00000
Sun.2 157.48718
Thu.2 105.97436
Wed.2 97.08974
Fri.3 108.46154
Sun.3 145.24359                 
")

names(dh) <- c("day.hour", "value")