R: Группировать отдельные даты в недели [дубликат]

Попробуйте что-то вроде этого:

$link = @new mysqli($this->host, $this->user, $this->pass) 
$statement = $link->prepare($sqlStatement );
                if(!$statement)
                {
                    $this->debug_mode('query', 'error', '#Query Failed<br/>'.$link->error);
                    return false;
                }
10
задан ekad 5 May 2017 в 01:47
поделиться

3 ответа

Вам нужно только количество завершенных 7-дневных интервалов с первой записи?

dvec <- as.Date("2001-04-01")+0:90
dweek <- as.numeric(dvec-dvec[1]) %/% 7
dweek[1:21]
# [1] 0 0 0 0 0 0 0 1 1 1 1 1 1 1 2 2 2 2 2 2 2
19
ответ дан 42- 16 August 2018 в 04:38
поделиться
  • 1
    +1 для вычета – Gavin Simpson 7 November 2011 в 10:42
  • 2
    @GavinSimpson: I & quot; + () - ed & quot; так как ваши усилия послужили основой для вычета. (Теперь я получаю всплывающее окно «Гэвин Симпсон», когда я печатаю «@ Gavin». Аккуратно). – 42- 7 November 2011 в 18:24
  • 3
    И вам нужно любить функцию целочисленного деления %/% - я бы дал еще +1 для этого, если бы мог - ответ действительно очень аккуратен и краток. – Gavin Simpson 7 November 2011 в 20:12
  • 4
    Это также работает для объектов datetime (POSIXct), но это в секундах, поэтому вам нужно использовать %/% (7*24*60*60) – naught101 23 July 2014 в 02:16
  • 5
    Huh ... так что для векторов Date это примерно в 30 раз быстрее, чем метод Гэвина. Метод Гэвина относительно лучше для POSIXlt (только в 7 раз медленнее). Для векторов POSIXct этот метод только очень медленно замедляется, однако метод Гэвина в 690 раз медленнее. Не уверен, существуют ли какие-либо другие механизмы хранения даты и времени. Жаль, потому что метод Гэвина более полезен - он возвращается неделю-неделя, а не неделя с даты начала. – naught101 23 July 2014 в 04:49

strftime - ваш друг ...

? strftime # to see the help and the format

set.seed(1)
dates <- Sys.Date() + sample(1:365, size = 10)

R> dates
 [1] "2012-02-11" "2012-03-21" "2012-06-01" "2012-09-30"
 [5] "2012-01-18" "2012-09-25" "2012-10-11" "2012-06-30"
 [9] "2012-06-18" "2011-11-28"

# %j for julian day - number of the day since the 1st of january each year

R> strftime(dates, format = "%j") # or format(dates, format = "%j")
 [1] "042" "081" "153" "274" "018" "269" "285" "182" "170" "332"

R> strftime(dates, format = "%w")
 [1] "6" "3" "5" "0" "3" "2" "4" "6" "1" "1"

# my locale is in French so...
R> strftime(dates, format = "%A")
 [1] "samedi"   "mercredi" "vendredi" "dimanche" "mercredi"
 [6] "mardi"    "jeudi"    "samedi"   "lundi"    "lundi" 

Кстати, что вы подразумеваете под днем, днем ​​в течение месяца, недели или года?

8
ответ дан dickoa 16 August 2018 в 04:38
поделиться

Для каждой даты введите неделю года, к которой она принадлежит, форматируя ее с помощью format(), используя %U заполнителей формата %W. %U рассматривает воскресенье как первый день недели, тогда как %W считает понедельник первым днем ​​недели. Вот пример:

now <- as.Date(Sys.time())
dates <- seq(now, now + 25, by = "1 day") 

dat <- data.frame(Dates = dates, Week = format(dates, format = "%W"))
head(dat, 10)

Который дает:

> head(dat, 10)
        Dates Week
1  2011-11-06   44
2  2011-11-07   45
3  2011-11-08   45
4  2011-11-09   45
5  2011-11-10   45
6  2011-11-11   45
7  2011-11-12   45
8  2011-11-13   45
9  2011-11-14   46
10 2011-11-15   46

Хотя из вашего вопроса неясно, что именно вы хотите сделать, способ сопоставить этот вектор дат (ну, мой кадр данных dat выше) через merge(). Скажем, у нас есть вектор недель, который мы хотим сопоставить, и некоторые связанные данные в кадре данных weekdat:

weekdat <- data.frame(Week = 44:50, Price = c(10, 20, 25, 30, 20, 15, 10))

. Тогда мы можем связать dat с weekdat, используя merge() как таковую :

> merge(dat, weekdat)
   Week      Dates Price
1    44 2011-11-06    10
2    45 2011-11-07    20
3    45 2011-11-08    20
4    45 2011-11-09    20
5    45 2011-11-10    20
6    45 2011-11-11    20
7    45 2011-11-12    20
8    45 2011-11-13    20
9    46 2011-11-14    25
10   46 2011-11-15    25
11   46 2011-11-16    25
12   46 2011-11-17    25
13   46 2011-11-18    25
14   46 2011-11-19    25
15   46 2011-11-20    25
16   47 2011-11-21    30
17   47 2011-11-22    30
18   47 2011-11-23    30
19   47 2011-11-24    30
20   47 2011-11-25    30
21   47 2011-11-26    30
22   47 2011-11-27    30
23   48 2011-11-28    20
24   48 2011-11-29    20
25   48 2011-11-30    20
26   48 2011-12-01    20

Существуют другие способы сопоставления или привязки дат к неделям, но приведенное выше должно дать вам что-то для работы.

20
ответ дан Gavin Simpson 16 August 2018 в 04:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: