#r #lapply
#r #lapply
Вопрос:
итак, это очень глупый вопрос, и я почти уверен, что мне не хватает чего-то чрезвычайно очевидного.
У меня есть 12 месяцев в векторе с января по декабрь, и у меня есть фрейм данных, который имеет значения yearmonth, поэтому 201601, 201602, 201604 для января, февраля, марта.
Фрейм данных всегда будет отсортирован и начинается с января (201601)
Я извлекаю длину этого фрейма данных и хочу сопоставить каждый элемент фрейма данных с моим вектором за 12 месяцев.
Когда я запускаю lapplay, я получаю частичное решение, если фрейм данных имеет длину 15, я получаю сопоставление с январем — декабрем и 3 NAs, я хочу, чтобы сопоставление продолжалось, чтобы вместо этого было январь — март.
Это то, что у меня есть до сих пор
monthName <- c("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec")
entry <- data.frame("test"=c("1","2","3","4","5","6","7","8","9","10","11","12","13","14","15"))
month <- unlist(lapply(1:length(entry$test), function (x) monthName[x]))
> month
[1] «Январь» «Февраль» «Март» «Апрель» «Май» «Июнь» «Июль» «Август» «Сентябрь» «Октябрь» «Ноябрь» «Декабрь» НА-НА-НА
Как указал Хьюберт, это простое и элегантное решение rep_len(имя_месяца, длина(запись $test))
Комментарии:
1.
rep_len(monthName, length(entry$test))
2. хорошо, вау, это было так чертовски просто, и я также просмотрел rep_len! Спасибо, я пойду приложу ладонь к лицу на несколько минут, ха-ха
3. Мы можем обвинить в этом значение по умолчанию
stringsAsFactors =TRUE
🙂4. да, я вижу это сейчас
5.
entry$test <- as.numeric(as.character(entry$test)); monthName[ifelse(entry$test > 12, entry$test %% 12, entry$test)]
мне кажется, это имеет больше смысла.
Ответ №1:
Как указал Хьюберт, исправление этой текущей проблемы заключается в:
rep_len(monthName, length(entry$test))
Спасибо, Хьюберт