Как переработать символьный вектор в R? - PullRequest
0 голосов
/ 26 марта 2019

У меня есть список на каждый день от 2018-01-01 до 2018-06-01.Это вектор, и он выглядит следующим образом:

dates <- c("2018-01-01", "2018-01-02", "2018-01-03", ... , "2018-05-30", "2018-06-01")

Я хочу создать фрейм данных, в котором первый столбец содержит каждую из этих дат, а второй столбец - день недели.Я предполагаю, что 2018-01-01 - понедельник.

date           day
2018-01-01     Monday
2018-01-02     Tuesday
2018-01-03     Wednesday
...            ...
2018-06-01     Monday

С этой целью я работаю над фреймом данных, но мне было любопытно, как лучше перерабатывать дни недели, чемРешение я собрал.

day <- NULL
for (i in 1:length(dates)) {
    x <- i
    while (x > 7) {
        x <- i - 7
    }
    day <- c(day, days[x])
}

cbind(dates,day)

1 Ответ

0 голосов
/ 26 марта 2019

Мы можем использовать weekdays, чтобы получить день недели и поместить его в кадр данных.

data.frame(dates, day = weekdays(dates))

#      dates       day
#1 2018-01-01    Monday
#2 2018-01-02   Tuesday
#3 2018-01-03 Wednesday
#4 2018-05-30 Wednesday
#5 2018-06-01    Friday

РЕДАКТИРОВАТЬ

Если мы не хотимчтобы использовать любую встроенную функцию, мы можем создать вектор дней и поиск оттуда.Учитывая, что первый день - «понедельник», мы можем использовать оператор по модулю, чтобы найти соответствующий день для отдыха dates

days <- c("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday")

day <- days[(as.numeric(dates - dates[1]) %% 7) + 1]
day
#[1] "Monday"    "Tuesday"   "Wednesday" "Wednesday" "Friday" 

, а затем поместить их в фрейм данных

data.frame(dates, day)
#       dates       day
#1 2018-01-01    Monday
#2 2018-01-02   Tuesday
#3 2018-01-03 Wednesday
#4 2018-05-30 Wednesday
#5 2018-06-01    Friday

данные

dates<-as.Date(c("2018-01-01","2018-01-02","2018-01-03","2018-05-30","2018-06-01"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...