如何获得分类变量的一部分?

时间:2017-06-05 14:37:47

标签: r

我的数据集如下所示:

        dsn                register_at
1 AC000W000014612   Thu Mar 02 21:34:30 UTC 2017
2 AC000W000016124   Tue Mar 14 19:40:57 UTC 2017
3 AC000W000016219   Tue Apr 14 19:29:10 UTC 2017

我需要为每个dsn获得像Mar,Apr等月份规范。如何从变量寄存器中仅获取月份规格?

3 个答案:

答案 0 :(得分:0)

您可以substr使用Month names功能substr(df$register_at, 5, 7) 始终处于同一位置。

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("test.xls")

objExcel.Application.Visible = True
objExcel.Workbooks.Add
objExcel.Cells(1, 1).Value = "Test value"

objExcel.Application.Run "Macro.TestMacro()"
objExcel.ActiveWorkbook.Close


objExcel.Application.Quit
WScript.Echo "Finished."
WScript.Quit

答案 1 :(得分:0)

为了将来参考,我会尝试以更标准化的格式编写日期,例如年 - 月 - 日时:分:秒。

但是,我知道我们可能无法始终控制数据的格式(boo)。我只是想提一下,如果它采用更标准化的格式,那么lubridate包就会有一个名为floor_date的函数,可以轻松实现这一目标。

对于此特定实例,您可以只用空格分割字符串,并在该分割后仅选择第二个元素:

> # create data frame
> # note that, per your question, dsn and register_at are factors
> d <- data.frame(dsn=factor(c("AC000W000014612", "AC000W000016124", "AC000W000016219")),
+                 register_at=factor(c("Thu Mar 02 21:34:30 UTC 2017", "Tue Mar 14 19:40:57 UTC 2017", "Tue Apr 14 19:29:10 UTC 2017")))
> 
> library(stringr) # load package
> d$register_month <- str_split_fixed(as.character(d$register_at), " ", 3)[,2] # convert to character, split at a space, take the second element
> d
              dsn                  register_at register_month
1 AC000W000014612 Thu Mar 02 21:34:30 UTC 2017            Mar
2 AC000W000016124 Tue Mar 14 19:40:57 UTC 2017            Mar
3 AC000W000016219 Tue Apr 14 19:29:10 UTC 2017            Apr

请注意,register_month将是character向量,因此如果您想将其作为一个因素,您还必须使用as.factor将其恢复为一个因素。< / p>

答案 2 :(得分:0)

您应该执行以下步骤:

  1. 将您的语言区域设置为英语(如果您的计算机的语言环境已经是英语,则可以跳过此步骤!)
  2. 使用as.Date函数格式化数据(请检查下面的格式字符串)
  3. 一旦数据采用日期格式,只需从日期中提取月份部分。
  4. 示例代码:

    #Create the data frame
    mdata <- data.frame(dsn=character(0), register_at=character(0))
    mdata <- edit(mdata)
    
    #Set the locale to en_US (This is required, because month/date names are in english)
    Sys.setlocale(category = "LC_TIME", locale="English_US.1252")
    Sys.getlocale()
    
    #Convert the variable to date
    mdata$register_at_date <- as.Date(mdata$register_at,format="%a %b %d %H:%M:%S UTC %Y")
    
    #Extract the month part
    mdata$month <- months(mdata$register_at_date)
    
    #Print out the data frame
    print(mdata)
    
相关问题