Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何获得分类变量的部分级别?_R - Fatal编程技术网

R 如何获得分类变量的部分级别?

R 如何获得分类变量的部分级别?,r,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等。如何仅从寄存器at变量中获取月份规范 您可以使用s

我的数据集如下所示:

        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等。如何仅从寄存器at变量中获取月份规范

您可以使用substr函数,因为月份名称始终位于同一位置

substr(df$register_at, 5, 7)

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

然而,我知道我们可能并不总是能够控制数据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\u month将是一个字符向量,因此如果希望将其作为因子,则还必须使用as.factor将其恢复为因子。

您应该执行以下步骤:

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

#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)

sapplystrsplitdf$register_at,\\s,[,2是register_at真的是分类的还是日期?还是字符串?如果键入sapplylast.reg_数据,类?factors sapplylast.reg_数据,类dsn registed_at factors applystrsplitas.characterdf$register_at,\\s,[,2如果没有这些数据,我无法确定,但你在不同角色之间所做的一个改变似乎让NA?R的每件事有时都会因为各种因素而变得复杂。它正在工作。我的机器可能会有一些问题。我重新启动了我的PC和R,它工作得很好。谢谢you@P.Nitu,请将问题标记为已回答,如果他回答了我骗了你,或者至少骗了你。