首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在缺少一个级别(已删除)的情况下继续使用因子?

如何在缺少一个级别(已删除)的情况下继续使用因子?
EN

Stack Overflow用户
提问于 2015-12-16 17:05:01
回答 2查看 4.2K关注 0票数 0

我正在处理我下载的一组Fitbit数据,它有一个工作日列表,我正在尝试正确地订购这些数据。现在,当前的数据集没有“星期五”,但我希望无论什么因素都包括它。

如果数据中只有6个工作日,我又如何继续把工作日作为1-7来计算呢?

代码语言:javascript
复制
file<-choose.files()
   slp<-data.frame(read.csv(file))

   wkdaylevels<-c("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday")

    slp$FellAsleepAt<-strptime(slp$FellAsleepAt, format="%B %e, %Y at %I:%M%p")
    slp$AwokeAt<-strptime(slp$AwokeAt,format="%B %e, %Y at %I:%M%p")
    slp$TotalTimeSlept<-gsub("h ",":",slp$TotalTimeSlept)
    slp$TotalTimeSlept<-gsub("m","",slp$TotalTimeSlept)
    slp$TimeAsleep<-as.numeric(difftime(slp$AwokeAt,slp$FellAsleepAt))
    slp$Date<-as.Date(slp$FellAsleepAt, format="%M/%D/%Y")
    slp$DayofWeek<-as.factor(weekdays(slp$Date),levels=wkdaylevels)



    ggplot(slp,aes(x=DayofWeek,y=TimeAsleep))+
        geom_point()

这里的数据:https://docs.google.com/spreadsheets/d/1Vdgmtwx0vNKDKEZFMEGAWQ58H66ia-xjI0evR7idfkc/edit?usp=sharing

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-16 18:14:55

factor回答:使用而不是 as.factor

函数as强制一个对象到一个类。在您的情况下,as.<type>强制到一个类型(因子为您)。函数factor用于将对象编码为一个因子。关键的区别是as.factor不允许级别参数,而factor则允许。

如果检查每个函数的源代码,您将看到as.factor通过使用对象的唯一级别作为其级别来执行强制操作。如果未指定factor参数,但允许输入级别,则levels=会执行此操作。

例如:

代码语言:javascript
复制
x <- 1:6
x2 <- factor(x, levels= 1:7)
levels(x2)
[1] "1" "2" "3" "4" "5" "6" "7"
x2 <- as.factor(x, levels= 1:7) # in this case, levels won't be evaluated due to lazy evaluation
Error in as.factor(x, levels = 1:7) : unused argument (levels = 1:7)

我不知道为什么你的R会话没有给你这个错误。你在用R3.2.3吗?

票数 5
EN

Stack Overflow用户

发布于 2015-12-16 17:12:53

使用levels<- (?levels获取帮助):

代码语言:javascript
复制
wdays <- as.factor(c("Sunday", "Monday"))
wkdaylevels<-c("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday")
levels(wdays) <- wkdaylevels
wdays
# [1] Monday Sunday
# Levels: Sunday Monday Tuesday Wednesday Thursday Friday Saturday

如果您想要降低未使用的级别,可以使用

代码语言:javascript
复制
droplevels(wdays)
# [1] Monday Sunday
# Levels: Sunday Monday

代码语言:javascript
复制
factor(wdays)
# [1] Monday Sunday
# Levels: Sunday Monday
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34317916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档