【问题标题】:How to replace numeric month with a month's full name如何用月份的全名替换数字月份
【发布时间】:2020-01-07 12:48:48
【问题描述】:

使用 tidyverse 包将带有月份的列更改为完整的实际月份名称。请记住,即使这个数据在这里只有四个月,我的真实数据集包含一年中的所有实际月份。

我是 tidyverse 的新手

mydata <- tibble(camp = c("Platinum 2018-03","Reboarding 2018","New Acct Auto Jul18", "Loan2019-4"),
              Acct = c(1, 33, 6, 43),
              Balance = c(222, 7744, 949, 123),
              Month = c(1,4,6,8))

我希望输出是 一月、四月、六月、八月等。感谢您的帮助。

【问题讨论】:

  • @akrun 这个问题没有得到回答,你认为它的原因是因为我使用了相同的数据集,但添加了感兴趣的列。如果您能回答我的新问题,我将不胜感激。上一个答案没有解决我的问题。它为该列中的数据返回 NA。我不知道为什么,只是提示该字段保存为字符数据类型。
  • 你的意思是不是骗子?我在这里找到了相同的答案,只是它在mutate中使用
  • 我重新打开了,但不清楚
  • 我不认为这是一个骗局,因为当我使用这些代码中的任何一个时,它都会将该列中的数据转换为 NA。因此,我的问题没有解决。当我使用 mutate(MonthName = month.name[Month])。它创建了新列,但只有 NAs 作为数据。
  • @akrun 我已经解决了这个问题。所以代码不适用于我的真实数据的原因是因为它是一个字符变量,它也有前导零。为了解决这个问题,我添加删除前导零,然后在运行代码之前将数据类型从字符转换为数字。

标签: r tibble


【解决方案1】:

dplyr-lubridate 解决方案:

mydata %>% 
  mutate(Month = lubridate::month(Month, label = TRUE, abbr = FALSE))
# A tibble: 4 x 4
  camp                 Acct Balance Month  
  <chr>               <dbl>   <dbl> <ord>  
1 Platinum 2018-03        1     222 January
2 Reboarding 2018        33    7744 April  
3 New Acct Auto Jul18     6     949 June   
4 Loan2019-4             43     123 August 

【讨论】:

    【解决方案2】:

    R 带有一个month.name 向量,只要你只需要英文名字就可以了。

    mydata %>% mutate(MonthName = month.name[Month])
    

    给予:

    # A tibble: 4 x 5
      camp                 Acct Balance Month MonthName
      <chr>               <dbl>   <dbl> <dbl> <chr>    
    1 Platinum 2018-03        1     222     1 January  
    2 Reboarding 2018        33    7744     4 April    
    3 New Acct Auto Jul18     6     949     6 June     
    4 Loan2019-4             43     123     8 August 
    

    其他语言

    如果您需要其他语言,请使用此代码(或省略 as.character 以获得有序因子输出):

    library(lubridate)
    Sys.setlocale(locale = "French")
    mydata %>% mutate(MonthName = as.character(month(Month, label = TRUE, abbr = FALSE)))
    

    给予:

    # A tibble: 4 x 5
      camp                 Acct Balance Month MonthName
      <chr>               <dbl>   <dbl> <dbl> <chr>    
    1 Platinum 2018-03        1     222     1 janvier  
    2 Reboarding 2018        33    7744     4 avril    
    3 New Acct Auto Jul18     6     949     6 juin     
    4 Loan2019-4             43     123     8 août  
    

    【讨论】:

    • 我尝试了第一个代码,它运行但将该字段中的整个数据转换为 NA。这不是我想要的。
    • @Omomaxi 它在您问题中的数据上运行得很好。也许您的真实数据不同 - 也许Month 列是一个超过 12 个级别的因素?还是别的什么?
    • @Gregor 我并不否认它运行的事实,我只是说它把现场的全部数据都变成了 NA。另外,我检查了我拥有的真实数据的级别,它没有超过 12 个级别。这些是我运行此代码时的级别。独特的(西南$月)[1]“02”“05”“06”“07”“08”“09”“10”“11”“12”“04”
    • @G.Grothendeick。我已经解决了为什么您的代码最初无法正常工作的问题。所以代码不适用于我的真实数据的原因是因为它是一个字符变量,它也有前导零。为了解决这个问题,我添加删除前导零,然后在运行代码之前将数据类型从字符转换为数字。它工作得很好。谢谢。
    猜你喜欢
    • 2019-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多