Вырезать по дням без учета дней в начале и в конце года.

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

Date <- c("2017-01-01","2017-01-01","2017-01-02","2017-01-03","2017-01-03","2017-01-03","2017-01-03","2017-01-04","2017-01-04","2017-01-05")

Factor<-c("red", "blue", "green", "red", "red", "green", "green", "blue", "blue", "green")

Отдельная таблица для каждого из факторов. Все они должны иметь одну строку для каждого дня в году и общего количества наблюдений.

green <-  table(cut(ex$Date[which(ex$Factor=="green")], 'day'))

Как-то работает, но не идеально. Если на 01.01.2017 нет наблюдения, а на 02.01.2017 нет, то список будет начинаться с 02.01.2017. Набор данных рассчитан на один год. Та же проблема появляется в конце года (например, 31.12.2017, 30.12.2017, ... не указывается).

2017-01-02   1
2017-01-03   2
2017-01-04   0
2017-01-05   1

Есть ли у кого-нибудь идеи, как я могу это решить?

См. ?cut. Возможно вы хотите установить right = FALSE и / или include.lowest = TRUE

MichaelChirico 26.10.2018 05:33
0
1
38
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот один базовый вариант R с использованием aggregate:

df <- data.frame(Date, Color, stringsAsFactors=FALSE)
aggregate(df$Color, by=list(Date=df$Date), FUN=function(x) { sum(x=="green") })

        Date x
1 2017-01-01 0
2 2017-01-02 1
3 2017-01-03 2
4 2017-01-04 0
5 2017-01-05 1

Данные:

Date <- c("2017-01-01","2017-01-01","2017-01-02","2017-01-03","2017-01-03","2017-01-03",
    "2017-01-03","2017-01-04","2017-01-04","2017-01-05")
Color <- c("red", "blue", "green", "red", "red", "green", "green", "blue", "blue", "green")

Другие вопросы по теме