Длины разрывов и меток различаются R, преобразуют числовые месяцы в факторы [duplicate]

Вот пример из учебника matplotlib, найденного здесь здесь . Это один из более простых примеров, но я добавил прозрачность в легенду и добавил plt.show (), чтобы вы могли вставить это в интерактивную оболочку и получить результат:

import matplotlib.pyplot as plt
p1, = plt.plot([1, 2, 3])
p2, = plt.plot([3, 2, 1])
p3, = plt.plot([2, 3, 1])
plt.legend([p2, p1, p3], ["line 1", "line 2", "line 3"]).get_frame().set_alpha(0.5)
plt.show()

30
задан brittenb 2 June 2016 в 16:57
поделиться

3 ответа

Если аббревиатуры на английском языке приемлемы, R имеет встроенный постоянный вектор month.abb имен сокращенного месяца. Просто используйте цифровую дату, чтобы индексировать этот вектор сокращенных имен месяцев. Например, использование фиктивных данных:

set.seed(1)
df <- data.frame(A = runif(10), Month = sample(12, 10, replace = TRUE))

здесь несколько опций для индексации month.abb через Month:

> with(df, month.abb[Month])
 [1] "Mar" "Mar" "Sep" "May" "Oct" "Jun" "Sep" "Dec" "May" "Oct"
> df <- transform(df, MonthAbb = month.abb[Month])
> df
            A Month MonthAbb
1  0.26550866     3      Mar
2  0.37212390     3      Mar
3  0.57285336     9      Sep
4  0.90820779     5      May
5  0.20168193    10      Oct
6  0.89838968     6      Jun
7  0.94467527     9      Sep
8  0.66079779    12      Dec
9  0.62911404     5      May
10 0.06178627    10      Oct
54
ответ дан Gavin Simpson 22 August 2018 в 11:36
поделиться

Используйте lubridate, создайте вектор, начинающийся с известного месяца:

Тест: для этих чисел месяца предположим, что Jan = 1:

> m = c(1,2,6,7,9,10,11,12,0,99,NA)

do:

> require(lubridate)
> as.character(month(ymd(010101) + months(m-1),label=TRUE,abbr=TRUE))
 [1] "Jan" "Feb" "Jun" "Jul" "Sep" "Oct" "Nov" "Dec" "Dec" "Mar" NA   

, где (m-1) - это то, что мы начинаем с даты в январе.

Чтобы увидеть, как это сравнивается:

> cbind(m,as.character(month(ymd(010101) + months(m-1),label=TRUE,abbr=TRUE)))
      m         
 [1,] "1"  "Jan"
 [2,] "2"  "Feb"
 [3,] "6"  "Jun"
 [4,] "7"  "Jul"
 [5,] "9"  "Sep"
 [6,] "10" "Oct"
 [7,] "11" "Nov"
 [8,] "12" "Dec"
 [9,] "0"  "Dec"
[10,] "99" "Mar"
[11,] NA   NA   

Обратите внимание, что он интерпретирует месяц числа как mod-12, поэтому 99 отображает 3 (99 = 3 + (8 * 12)), а NA возвращает NA. Некоторые из уже опубликованных ответов не будут делать этого. -1 - ноябрь, так как 0 - декабрь

6
ответ дан Spacedman 22 August 2018 в 11:36
поделиться

Если вам нужна нестандартная аббревиатура месяца, тогда создайте свой собственный вектор поиска в месяц:

#dummy data
df <- data.frame(month = c(1,3,5))
#months vector assuming 1st month is Jan.
mymonths <- c("Jan","Feb","Mar",
              "Apr","May","Jun",
              "Jul","Aug","Sep",
              "Oct","Nov","Dec")
#add abbreviated month name
df$MonthAbb <- mymonths[ df$month ]

#result
df
#   month MonthAbb
# 1     1      Jan
# 2     3      Mar
# 3     5      May
7
ответ дан zx8754 22 August 2018 в 11:36
поделиться
Другие вопросы по тегам:

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