2017-09-15 42 views
1

我正在处理数据,我特别想使用时间间隔对数据进行分类。对数据进行分类并分配新数据

cut命令到来非常有用,因为我可以使用,例如,

data <- seq(1, 10) 
cut(data, 2) 
>> [1] (0.991,5.5] (0.991,5.5] (0.991,5.5] (0.991,5.5] (0.991,5.5] (5.5,10] (5.5,10] (5.5,10] (5.5,10] (5.5,10] 
Levels: (0.991,5.5] (5.5,10] 

如果要在两个间隔分类的数据。处理是更复杂问题的一部分,最终需要将新数据分配给自动生成的时间间隔。

什么是最有效的方法来做到这一点?因为试图读取levels()分类似乎太脏......

+2

看一看'findInterval' – James

回答

1

下面是使用基础R的快捷方式:

# Find intervals use original data 
labs = levels(cut(data, 2)) 
labs_df = cbind(lower = as.numeric(sub("\\((.+),.*", "\\1", labs)), 
     upper = as.numeric(sub("[^,]*,([^]]*)\\]", "\\1", labs))) 

# Find intervals on new data 
data_new = sample(1:10) 
interval_idx = findInterval(data_new, labs_df[,1]) 
interval_idx 

interval = labs[interval_idx] 

data.frame(data_new, interval_idx, interval) 
相关问题