Как правильно поменять строки на месячные сокращения в R? - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть датафрейм, который дает мне месяцы, помеченные как M1-M12 вместо января-де c. Я пытаюсь преобразовать значения М в месячные сокращения, и я не могу решить это. это dput для исходного кадра данных:

mapoc_temp = structure(list(Longitude = c(-43.5411605834961, -43.5411605834961, 
-43.5411605834961, -43.5411605834961, -43.5411605834961, -43.5411605834961, 
-43.5411605834961, -43.5411605834961, -43.5411605834961, -43.5411605834961, 
-43.5411605834961, -43.5411605834961, -43.5411605834961, -43.5411605834961, 
-43.5411605834961, -43.5411605834961, -43.5411605834961, -43.5411605834961, 
-43.5411605834961, -43.5411605834961, -43.5411605834961, -43.5411605834961, 
-43.5411605834961, -43.5411605834961, -43.5411605834961, -43.5411605834961, 
-43.5411605834961, -43.5411605834961, -43.5411605834961, -43.5411605834961, 
-43.5411605834961, -43.5411605834961, -43.5411605834961, -43.5411605834961, 
-43.5411605834961, -43.5411605834961), Latitude = c(59.950626373291, 
59.950626373291, 59.950626373291, 59.950626373291, 59.950626373291, 
59.950626373291, 59.950626373291, 59.950626373291, 59.950626373291, 
59.950626373291, 59.950626373291, 59.950626373291, 59.950626373291, 
59.950626373291, 59.950626373291, 59.950626373291, 59.950626373291, 
59.950626373291, 59.950626373291, 59.950626373291, 59.950626373291, 
59.950626373291, 59.950626373291, 59.950626373291, 59.950626373291, 
59.950626373291, 59.950626373291, 59.950626373291, 59.950626373291, 
59.950626373291, 59.950626373291, 59.950626373291, 59.950626373291, 
59.950626373291, 59.950626373291, 59.950626373291), Temp = c(-1.1657087802887, 
-1.70908033847809, -1.70908033847809, -1.64846479892731, -1.50903105735779, 
-1.50903105735779, -1.29481840133667, -0.819319725036621, -0.819319725036621, 
0.937921285629272, -0.033661849796772, -0.033661849796772, 3.09912943840027, 
3.3768904209137, 3.3768904209137, 5.44990491867065, 5.90848398208618, 
5.90848398208618, 8.87255096435547, 7.57381582260132, 7.57381582260132, 
9.52607250213623, 9.41888046264648, 9.41888046264648, 7.80030059814453, 
7.23698377609253, 7.23698377609253, 3.53716945648193, 4.55290651321411, 
4.55290651321411, 0.885161995887756, 1.48482501506805, 1.48482501506805, 
-0.0936287492513657, 0.650709450244904, 0.650709450244904), month = c("M1", 
"M1", "M1", "M2", "M2", "M2", "M3", "M3", "M3", "M4", "M4", "M4", 
"M5", "M5", "M5", "M6", "M6", "M6", "M7", "M7", "M7", "M8", "M8", 
"M8", "M9", "M9", "M9", "M10", "M10", "M10", "M11", "M11", "M11", 
"M12", "M12", "M12"), year = c(2016, 2017, 2018, 2016, 2017, 
2018, 2016, 2017, 2018, 2016, 2017, 2018, 2016, 2017, 2018, 2016, 
2017, 2018, 2016, 2017, 2018, 2016, 2017, 2018, 2016, 2017, 2018, 
2016, 2017, 2018, 2016, 2017, 2018, 2016, 2017, 2018)), row.names = c(NA, 
-36L), class = "data.frame")

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

#Rename my months so they are abbreviated and not M1:M12
mapoc_temp$month = c(M1 = "Jan", M2 = "Feb", M3 = "Mar",
                     M4 = "Apr", M5 = "May", M6 = "Jun",
                     M7 = "Jul", M8 = "Aug", M9 = "Sep",
                     M10 = "Oct", M11 = "Nov", M12 = "Dec")

, но когда я использую этот код, он дает мне месяцы, отличные от моих исходных, для каждой из строк, как вы можете видеть на этом новом фрейме данных, который я разместил:

mapoc_temp = structure(list(Longitude = c(-43.5411605834961, -43.5411605834961, 
-43.5411605834961, -43.5411605834961, -43.5411605834961, -43.5411605834961, 
-43.5411605834961, -43.5411605834961, -43.5411605834961, -43.5411605834961, 
-43.5411605834961, -43.5411605834961, -43.5411605834961, -43.5411605834961, 
-43.5411605834961, -43.5411605834961, -43.5411605834961, -43.5411605834961, 
-43.5411605834961, -43.5411605834961, -43.5411605834961, -43.5411605834961, 
-43.5411605834961, -43.5411605834961, -43.5411605834961, -43.5411605834961, 
-43.5411605834961, -43.5411605834961, -43.5411605834961, -43.5411605834961, 
-43.5411605834961, -43.5411605834961, -43.5411605834961, -43.5411605834961, 
-43.5411605834961, -43.5411605834961), Latitude = c(59.950626373291, 
59.950626373291, 59.950626373291, 59.950626373291, 59.950626373291, 
59.950626373291, 59.950626373291, 59.950626373291, 59.950626373291, 
59.950626373291, 59.950626373291, 59.950626373291, 59.950626373291, 
59.950626373291, 59.950626373291, 59.950626373291, 59.950626373291, 
59.950626373291, 59.950626373291, 59.950626373291, 59.950626373291, 
59.950626373291, 59.950626373291, 59.950626373291, 59.950626373291, 
59.950626373291, 59.950626373291, 59.950626373291, 59.950626373291, 
59.950626373291, 59.950626373291, 59.950626373291, 59.950626373291, 
59.950626373291, 59.950626373291, 59.950626373291), Temp = c(-1.1657087802887, 
-1.70908033847809, -1.70908033847809, -1.64846479892731, -1.50903105735779, 
-1.50903105735779, -1.29481840133667, -0.819319725036621, -0.819319725036621, 
0.937921285629272, -0.033661849796772, -0.033661849796772, 3.09912943840027, 
3.3768904209137, 3.3768904209137, 5.44990491867065, 5.90848398208618, 
5.90848398208618, 8.87255096435547, 7.57381582260132, 7.57381582260132, 
9.52607250213623, 9.41888046264648, 9.41888046264648, 7.80030059814453, 
7.23698377609253, 7.23698377609253, 3.53716945648193, 4.55290651321411, 
4.55290651321411, 0.885161995887756, 1.48482501506805, 1.48482501506805, 
-0.0936287492513657, 0.650709450244904, 0.650709450244904), month = c("Jan", 
"Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", 
"Nov", "Dec", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", 
"Aug", "Sep", "Oct", "Nov", "Dec", "Jan", "Feb", "Mar", "Apr", 
"May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"), year = c(2016, 
2017, 2018, 2016, 2017, 2018, 2016, 2017, 2018, 2016, 2017, 2018, 
2016, 2017, 2018, 2016, 2017, 2018, 2016, 2017, 2018, 2016, 2017, 
2018, 2016, 2017, 2018, 2016, 2017, 2018, 2016, 2017, 2018, 2016, 
2017, 2018)), row.names = c(NA, -36L), class = "data.frame")

Как вы можете видеть вместо назначения M1 - Jan и M2 - Февраль и М3 - Мар и др. c. Это дает мне сокращенные месяцы в порядке, независимо от того, каково первоначальное значение. Кто-нибудь знает как это исправить?

1 Ответ

6 голосов
/ 18 февраля 2020

с использованием dplyr вы можете попробовать это:

install.packages("dplyr")
library(dplyr)
mapoc_temp <- mapoc_temp %>%
              mutate(month_new = month.abb[as.numeric(gsub("M","",month))])

%>% является индикатором трубопровода. month.abb - это что-то из базы R, содержащее все сокращения месяца (обратите внимание, что это аббревиатуры для языка, на котором написан ваш R, вы можете изменить его, если хотите , см., например, ). Используя gsub, я удаляю букву М, стоящую перед числами. Эти числа используются для выбора правильного месяца в month.abb.

Это приводит к:

   Longitude Latitude       Temp month year month_new
1  -43.54116 59.95063 -1.1657088    M1 2016       Jan
2  -43.54116 59.95063 -1.7090803    M1 2017       Jan
3  -43.54116 59.95063 -1.7090803    M1 2018       Jan
4  -43.54116 59.95063 -1.6484648    M2 2016       Feb
5  -43.54116 59.95063 -1.5090311    M2 2017       Feb
6  -43.54116 59.95063 -1.5090311    M2 2018       Feb
7  -43.54116 59.95063 -1.2948184    M3 2016       Mar
8  -43.54116 59.95063 -0.8193197    M3 2017       Mar
9  -43.54116 59.95063 -0.8193197    M3 2018       Mar
10 -43.54116 59.95063  0.9379213    M4 2016       Apr

Если вы не хотите указывать новую переменную, просто измените month_new на месяц. Но это для целей отображения, что значение M # месяца правильно преобразованы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...