我为这个笨重的标题提前道歉,但我不知道如何更准确地定义我想要做的事情。
首先,我将生成一小部分数据样本:
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个变量
时,如何“削减”答案 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