Я не могу указать правильный формат даты для подстановки кадра данных в R - PullRequest
0 голосов
/ 04 марта 2012

Этот вопрос относится к моему предыдущему, Подмножество данных для указанного месяца и года

Я использую команду

sales <- read.csv ("mysales.csv", colClasses = "character") </p>

для получения кадра данных, который выглядит следующим образом:

    row     date            pieces       income
    1       21/11/2011      49           220.5
    2       22/11/2011      58           261
    3       23/11/2011      23           103.5
    4       24/11/2011      57           256.5

Я хочу создать подмножество для ноября 2011 года, используя код, предоставленный вмой предыдущий вопрос, но различные попытки потерпели неудачу.Поэтому для проверки я написал в консоли:

format.Date(sales[1,1], "%Y")=="2011"

и получил ответ:

[1] FALSE

Более того:

format(as.Date(sales[1,1]), "%d/%m/%Y")
[1] "20/11/21"

Как я могу, хотя бы, знаете, что происходит с форматом даты?

Что я должен сделать для поднабора фрейма данных, используя такой код:

subset(sales, format.Date(date, "%m")=="11" & format.Date(date, "%Y")=="2011")

Извините, если мой вопрос не ясен, но проблема, с которой я столкнулсямне тоже не понятно.

(Изменить на правильное форматирование)

Ответы [ 2 ]

1 голос
/ 04 марта 2012

В настоящее время вы думаете, что даты на самом деле представляют собой просто строки символов.Вам нужно превратить их в Date объекты, используя as.Date, и для этого укажите формат, в котором они находятся (%d/%m/%Y), иначе R не угадает это для вас.

sales <- data.frame(date   = c("21/11/2011", "21/11/2011", "23/11/2012", "24/11/2012"),
                    pieces = c(49,58,23,57,34),
                    income = c(220.5, 261, 103.5, 256.5, 112))
class(sales$date)
# [1] "factor"
sales$date <- as.Date(sales$date, "%d/%m/%Y")
class(sales$date)
# [1] "Date"
subset(sales, format.Date(date, "%m")=="11" & format.Date(date, "%Y")=="2011")
#         date pieces income
# 1 2011-11-21     49  220.5
# 2 2011-11-21     58  261.0
0 голосов
/ 04 марта 2012

Просто, чтобы сделать ответ более общим, я добавил еще один месяц.

Рабочие данные выглядят так:

           date pieces income
1 21/11/2011     49  220.5
2 22/11/2011     58  261.0
3 23/11/2011     23  103.5
4 24/11/2011     57  256.5
5 23/12/2011     50  240.0

Есть много способов сделать это. Один из них, который я регулярно использую, это strsplit и lapply.

sale$date1<-as.Date(sale$date, "%d/%m/%Y")  # let R know the date format

# Create a column of months by splitting the dates into 3 parts and grabbing the middle 
# part which is months
sale$months<-lapply(strsplit(as.character(sale$date1), "-"), function(x){x[2]}) 

# finally keep only the data for the month of November 

required<-subset(sale[which(sale$months==11),], select=-c(months,date1))

        date pieces income
1 21/11/2011     49  220.5
2 22/11/2011     58  261.0
3 23/11/2011     23  103.5
4 24/11/2011     57  256.5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...