2012-01-24 5 views
0

Я только начинаю с R и надеюсь получить помощь. У меня есть набор данных в файле следующим образом:Создание кадра данных, основанного на дне недели из кадра данных, содержащего несколько месяцев данных

20111001|37|9|9 
20111002|48|6|11 
... 
20111031|42|6|8 


я загрузил в файл, используя следующие:

myClasses <- c("character", "numeric", "numeric", "numeric") 
    df <- read.table("inputfile", FALSE, "|", colClasses=myClasses) 
    names(df) <- c("datestamp", "cnt1", "cnt2", "cnt3") 
    df$datestamp <- as.Date(df$datestamp, "%Y%m%d") 


Как я могу создать еще один кадр данных, содержащий только данные из определенного дня недели (т. е. данные, содержащие всю ту же информацию, что и df, но только для Fridays)?

ответ

1

Если вы делаете это один раз (только в течение одного дня), вы можете использовать

fridays <- df[format(df$datestamp, "%A") == "Friday",] 

Ваши данные примера не имеет дней в пятницу, так это пустой кадр данных.

Если вы собираетесь подмножество на большее количество дней, может быть проще сделать столбец недели недели, а затем подмножество на этом.

df$day.of.week <- format(df$datestamp, "%A") 
fridays <- df[df$day.of.week == "Friday",] 

Зайдя еще дальше спекуляции, если вы планируете делать то же самое для каждого подмножества данных, смотрите в разделенным применять-скомбинировать подходы для данных (различные функции, связанные с apply и plyr пакет, в том числе другие).

+0

спасибо. Это помогло мне сделать именно то, что я хотел сделать. – bhinks

0

Вот еще один подход, используя lubridate.

# READ DATA 
dat <- read.table(text = 
"20111001|37|9|9 
20111002|48|6|11 
20111031|42|6|8", 
sep = "|", header = F, 
) 

# FORMAT DATE COLUMN 
library(lubridate) 
dat <- transform(dat, V1 = ymd(V1)) 

# CREATE SUBSET 
subset(dat, wday(V1, label = T) == 'Sat') 
Смежные вопросы