基于我之前提出的一个问题,@ Andrie回答说,我对cut函数和标签的使用有疑问.
我想根据用户登录的次数获取摘要统计信息.
这是我的数据:
# Get random numbers
NumLogin <- round(runif(100,1,50))
# Set the login range
LoginRange <- cut(NumLogin,
c(0,1,3,5,10,15,20,Inf),
labels=c('1','2','3-5','6-10','11-15','16-20','20+')
)
Run Code Online (Sandbox Code Playgroud)
现在我有了我的LoginRange,但我不确定该cut函数是如何工作的.我想找到已登录1次,2次,3-5次等的用户,同时仅包括用户,如果他们在该范围内.是cut包括3两次(在2桶和3-5桶)功能?如果我查看我的示例,我可以看到登录3次的用户,但他们是cut'2'.我查看了文档和R我拥有的每本书,但没有运气.我究竟做错了什么?
另外 - 作为使用问题 - 我应该将LoginRange附加到我的数据框吗?如果是这样,最好的方法是什么?
DF <- data.frame(NumLogin, LoginRange)
Run Code Online (Sandbox Code Playgroud)
?
谢谢
Jos*_*ien 18
该cut()功能定义的间隔(默认情况下)在右侧关闭.要了解这意味着什么,请尝试以下方法:
cut(1:2, breaks=c(0,1,2))
# [1] (0,1] (1,2]
Run Code Online (Sandbox Code Playgroud)
如您所见,整数1包含在范围内(0,1],而不在范围内(1,2].它不会被重复计算,并且对于任何落在您定义的bin之外的输入值,cut()将返回值NA.
在处理整数值数据时,我倾向于在整数之间设置断点,以避免绊倒自己.实际上,使用您的数据执行此操作(如下所示),显示第2和第3个分箱实际上被错误地命名,这很好地说明了这一点!
LoginRange <- cut(NumLogin,
c(0.5, 1.5, 3.5, 5.5, 10.5, 15.5, 20.5, Inf),
# c(0,1,3,5,10,15,20,Inf) + 0.5,
labels=c('1','2-3','4-5','6-10','11-15','16-20','20+')
)
Run Code Online (Sandbox Code Playgroud)