对于一个附带项目,我目前正在尝试基于这些数据(一种散点图(制作一个面板,其中有日期以及价格如何随时间变化。我目前处于最困难的状态之一(数据清理(。为了提取信息,我正在尝试拆分变量。例如,在变量departure_info
中,我想划分为变量departure_info_time
和departure_info_day
。此外,在变量price
中,我想提取358、480、590等数字。
df1 <- data.frame(depart = c("OSL", "WAW", "VIE", "MUC", "FRA"),
destination = c("KEF", "ARN", "RIX", "VCE", "OSL"),
departue_info = c("['12:45 am Sa 19 Feb']", "['07:55 am Sa 19 Feb']", "['09:05 am Sa 19 Feb']", "['21:45 am Sa 19 Feb', '15:30 am Sa 19 Feb']", "['10:25 am Sa 19 Feb', '16:10 am Sa 19 Feb', '21:40 am Sa 19 Feb']"),
price = c("['358<U+0080>']", "['480<U+0080>']", "['590<U+0080>']", "['354<U+0080>', '418<U+0080>']", "['249<U+0080>', '249<U+0080>', '249<U+0080>', '419<U+0080>']"))
如果有人能帮我,我会很感激。我试过str_extract()
和gsub()
,但都没能成功。如果有人能给我一个建议,我也会很感激,如果在一排中我有几个价格,而在另一排中只有一个。
我感谢你的帮助:(
看起来departure_info
中的每个项目都有固定数量的字符,所以我使用substr
提取第3个到第10个字符的时间和第12个到第20个字符的日期的子字符串。
我们可以对价格采取同样的方法,但这是一个简单的正则表达式模式,用于查找一个或多个数字"\d+"
,所以我只将其与str_extract
一起使用,它将提取模式的第一个出现,即price
字符串中的第一组连续数字。
library(stringr)
library(dplyr)
df1 %>%
mutate(
depart_time = substr(departue_info, start = 3, stop = 10),
depart_date = substr(departue_info, start = 12, stop = 20),
price_num = as.numeric(str_extract(price, "\d+"))
)
# depart destination departue_info
# 1 OSL KEF ['12:45 am Sa 19 Feb']
# 2 WAW ARN ['07:55 am Sa 19 Feb']
# 3 VIE RIX ['09:05 am Sa 19 Feb']
# 4 MUC VCE ['21:45 am Sa 19 Feb', '15:30 am Sa 19 Feb']
# 5 FRA OSL ['10:25 am Sa 19 Feb', '16:10 am Sa 19 Feb', '21:40 am Sa 19 Feb']
# price depart_time depart_date price_num
# 1 ['358<U+0080>'] 12:45 am Sa 19 Feb 358
# 2 ['480<U+0080>'] 07:55 am Sa 19 Feb 480
# 3 ['590<U+0080>'] 09:05 am Sa 19 Feb 590
# 4 ['354<U+0080>', '418<U+0080>'] 21:45 am Sa 19 Feb 354
# 5 ['249<U+0080>', '249<U+0080>', '249<U+0080>', '419<U+0080>'] 10:25 am Sa 19 Feb 249
如果你想得到所有的价格数字,我们将首先去掉U0080
,然后使用str_extract_all
而不是str_extract
。这将生成一个list
列,然后您可以以各种方式使用它。。。
df1 %>%
select(price) %>%
mutate(
price_num = price %>% str_replace_all(fixed("U+0080"), "") %>% str_extract_all("\d+")
)
# price price_num
# 1 ['358<U+0080>'] 358
# 2 ['480<U+0080>'] 480
# 3 ['590<U+0080>'] 590
# 4 ['354<U+0080>', '418<U+0080>'] 354, 418
# 5 ['249<U+0080>', '249<U+0080>', '249<U+0080>', '419<U+0080>'] 249, 249, 249, 419