2016-07-11 6 views
0

Скажем, у меня есть 10 data.frame S, которые содержат даты в их именах из 01-01-00 в 10-01-00 с другими буквами и символами, добавленных к концу в формате ddmmyyМожет ли ls() иметь рисунок> 1?

Э.Г.010100/sgh/d_3 и 020100/aff/d_1

Если бы я хотел, чтобы создать вектор выше data.frame, есть способ, чтобы выбрать их, не записывая их в индивидуальном порядке?

Я попытался создать вектор последовательности дат и положить это в к pattern = но пришел с ошибкой (код ниже):

Dates <- seq(as.Date("2000-01-01"),as.Date("2000-01-02"),1) 
Dates <- format(Dates,"%d%m%y") 
ls(pattern=Dates) 

In grep(pattern, all.names, value = TRUE) : 
    argument 'pattern' has length > 1 and only the first element will be used 

Я предполагаю, что шаблон может быть только одно значение?

+0

@LyzandeR no it wont. это будет соответствовать вещам со словом «Даты» в названии. – Spacedman

+0

Посмотрите на 'stri_detect' из пакета' stringi'. Мне нравится этот пакет, он предлагает все операции с регулярным выражением с последовательным синтаксисом! –

+0

Фактически 'stri_subset', примененный к' ls() ', должен делать то, что вы хотите! –

ответ

1

Создайте шаблон, соответствующий любой строкам даты, которые вы хотите. Один из способов соединить все строки с | символами:

> Dates <- seq(as.Date("2000-01-01"),as.Date("2000-01-10"),1) 
> Dates 
[1] "2000-01-01" "2000-01-02" "2000-01-03" "2000-01-04" "2000-01-05" 
[6] "2000-01-06" "2000-01-07" "2000-01-08" "2000-01-09" "2000-01-10" 
> D2 = paste(Dates,collapse="|") 
> D2 
[1] "2000-01-01|2000-01-02|2000-01-03|2000-01-04|2000-01-05|2000-01-06|2000-01-07|2000-01-08|2000-01-09|2000-01-10" 

Теперь у меня есть рабочее пространство с различными битами и кусками в:

> ls() 
[1] "d"    "d010100foo"  "d010110bar"  "D2"    
[5] "d2000-01-01bar" "d2000-01-10bar" "d2000-02-10foo" "Dates"   
[9] "dorig"   "j"    "p"    "x"    
[13] "y"    "z"    

Но если я использую этот шаблон я получаю те, которые сопрягать даты:

> ls(pattern=D2) 
[1] "d2000-01-01bar" "d2000-01-10bar" 

Это может получить громоздкое, если у вас много вещей, чтобы соответствовать, но этому моменту вы, вероятно, можете написать простое регулярное выражение, чтобы соответствовать всем тонким gs - что-то вроде [0-9]{4}-[0-9]{2}-[0-9]{2} (непроверенный), который должен совпадать с четырьмя цифрами, тире, двумя цифрами, тире, двухзначной последовательностью.

Отрегулируйте шаблон в соответствии с форматом даты. Формат, который вы использовали, не рекомендуется: https://xkcd.com/1179/

+0

Это сработало отлично, спасибо вам большое! – Bonono