我试图为具有剪切功能的比率创建类别。我需要为无限或NaN的值创建一个不同的类别。
示例表:
set.seed(1)
tbl_a<-data.frame(a=round(runif(200, -1,1)*10,0)/10, b=rep(seq(0,9), 10))
tbl_a$ratio=tbl_a$a/tbl_a$b
我的尝试是:
tbl_a$ratio_G<-ifelse(tbl_a$ratio %in% c(Inf, -Inf,NaN), 'xx',
cut(tbl_a$ratio, breaks=c(0,0.1,0.2,0.27,0.35,0.54,0.90,0.99,Inf), right=FALSE))
但是我没有使用breacks来获得等级值。
如何获得原始休息时间以及&#39; xx&#39;对于NaN还是Infinite?感谢。
EDITION:我在应用了akrun的建议后对结果进行分组时发现了另一个问题。所以我更改了休息时间以显示案例:
tbl_a$ratio_G<-ifelse(tbl_a$ratio %in% c(Inf, -Inf,NaN), 'xx',
as.character(cut(tbl_a$ratio, breaks=c(-Inf,-1,-0.1,0.1,0.2,0.5,0.99,Inf), right=FALSE)))
library (dplyr)
tbl_a%>%group_by(ratio_G)%>%summarise(cant=n())
所以,我得到了:
ratio_G cant
(chr) (int)
[-0.1,0.1) 98
[-1,-0.1) 40
[0.1,0.2) 22
[0.2,0.5) 15
[0.5,0.99) 5
xx 20
但这不是有序的。我应该得到:
ratio_G cant
(chr) (int)
[-1,-0.1) 40
[-0.1,0.1) 98
[0.1,0.2) 22
[0.2,0.5) 15
[0.5,0.99) 5
xx 20
我认为这是因为标签是字符。这是主要问题的解决方案所产生的问题,所以我想这仍然是同一个问题。