使用多个数字向量为观测值分配因子水平

时间:2015-04-19 18:27:57

标签: r

我为这个笨重的标题提前道歉,但我不知道如何更准确地定义我想要做的事情。

首先,我将生成一小部分数据样本:

data<-data.frame("ID"=c("A","A","A","B","B","B","C","C","C"),
                 "emp.num"=c(2,3,100,150,250,300,400,500,600),
                 "rev"=c(10,80,100,200,300,50,300,350,350))

看起来像这样:

  ID emp.num rev
1  A       2  10
2  A       3  80
3  A     100 100
4  B     150 200
5  B     250 300
6  B     300  50
7  C     400 300
8  C     500 350
9  C     600 350

“ID”是公司名称,“emp.num”表示公司的员工人数,“rev”表示收入。

我想要做的是创建一个因子变量(Size),根据以下原则将公司分为“小”,“中”和“大”:

small:拥有rev(0,65)和emp.num(0,50)

的公司

medium:拥有rev(65,260)和emp.num(50,250)

的公司

large:rev&gt; 260 and emp.num&gt; 250

所以最后我想得到这个:

  ID emp.num rev Size
1  A       2  10    S
2  A       3  80    M
3  A     100 100    M
4  B     150 200    M
5  B     250 300    L
6  B     300  50    L
7  C     400 300    L
8  C     500 350    L
9  C     600 350    L

如果我想从一个数字创建一个因子变量(让我们只说来自rev或者只来自emp.num),这当然是使用cut()函数的一个简单问题,但是我已经完成了当我想使用像这样的2个变量

时,如何“削减”

1 个答案:

答案 0 :(得分:1)

使用findInterval怎么样?

ind <- pmax(findInterval(data$emp.num, c(0, 50, 250, Inf)),
       findInterval(data$rev, c(0, 65, 260, Inf)))

cbind(data, size = c("Small", "Medium", "Large")[ind])
  ID emp.num rev   size
1  A       2  10  Small
2  A       3  80 Medium
3  A     100 100 Medium
4  B     150 200 Medium
5  B     250 300  Large
6  B     300  50  Large
7  C     400 300  Large
8  C     500 350  Large
9  C     600 350  Large