根据另一个表对表列进行分类

时间:2016-05-30 11:10:40

标签: r dataframe classification

我怎么能用R做到这一点?我有一个数据框 df

id  volume
1   139
2   139
3   133
4   100
5   NA
6   145

我有一个分类表 tb

min max class
100 110 class1
110 120 class2
120 130 class3
130 140 class4
140 150 class5

结果我需要这样的表 df_new

id  volume  class
1   139 class4
2   139 class4
3   133 class4
4   100 class1
5   NA  NA
6   145 class5

3 个答案:

答案 0 :(得分:1)

我们可以使用cut

df$class <- cut(df$volume, breaks = unique(unlist(tb[1:2])), 
                          labels = tb$class, include.lowest=TRUE)
df 
#  id volume  class
#1  1    139 class4
#2  2    139 class4
#3  3    133 class4
#4  4    100 class1
#5  5     NA   <NA>
#6  6    145 class5

答案 1 :(得分:1)

如果volume是,例如,等于110,则不清楚会发生什么,但可能是这样:

DF <- read.table(text = "id  volume
                 1   139
                 2   139
                 3   133
                 4   100
                 5   NA
                 6   145", header = TRUE)

classes <- read.table(text = "min max class
                      100 110 class1
                      110 120 class2
                      120 130 class3
                      130 140 class4
                      140 150 class5", header = TRUE)

DF$class <- classes$class[findInterval(DF$volume, c(classes$min, tail(classes$max, 1)))]
#  id volume  class
#1  1    139 class4
#2  2    139 class4
#3  3    133 class4
#4  4    100 class1
#5  5     NA   <NA>
#6  6    145 class5

答案 2 :(得分:0)

或使用sqldf包和简单的join

sqldf("SELECT df.id, df.volume, tb.class 
            FROM df LEFT OUTER JOIN tb 
                ON (df.volume>=tb.min AND df.volume<tb.max)")

  # id volume  class
# 1  1    139 class4
# 2  2    139 class4
# 3  3    133 class4
# 4  4    100 class1
# 5  5     NA   <NA>
# 6  6    145 class5