2014-11-14 82 views
-1
EMPLTOT_N FIRMTOT average min 
12289593 4511051 5 1 
26841282 1074459 55 10 
15867437 81243 300 100 
6060684 8761 750 500 
52366969 8910 1000 1000 
137003 47573 5 1 
226987 10372 55 10 
81011 507 300 100 
23379 52 750 500 
13698 42 1000 1000 
67014 20397 5 1 

我的数据看起来像上面的数据。我想创建一个使用发生变异函数,新列EMP:if statement and mutate

emp= average*FIRMTOT if EMPLTOT_N/FIRMTOT<min 
and emp=EMPLTOT_N if EMPLTOT_N/FIRMTOT>min 

回答

0

在您的样本数据EMPLTOT_N/FIRMTOT不会比min少,但这应该工作:

df <- read.table(text = "EMPLTOT_N FIRMTOT average min 
12289593 4511051 5 1 
26841282 1074459 55 10 
15867437 81243 300 100 
6060684 8761 750 500 
52366969 8910 1000 1000 
137003 47573 5 1 
226987 10372 55 10 
81011 507 300 100 
23379 52 750 500 
13698 42 1000 1000 
67014 20397 5 1", header = TRUE) 

library('dplyr') 
mutate(df, emp = ifelse(EMPLTOT_N/FIRMTOT < min, average * FIRMTOT, EMPLTOT_N)) 

在上面,如果EMPLTOT_N/FIRMTOT == minemp将被赋予EMPLTOT_N的值,因为您没有指定在这种情况下想要发生的事情。

+0

在答案的开始处的警告是没有意义的。如果比例从不小于'min',那么只有第二个向量将被分配给'emp',所以这个操作没有意义。 – 2014-11-14 17:26:23

+0

@BondedDust基于OP的问题,我假设实际数据确实包含比例小于'min'的行,并且这只是没有反映在他们提供的示例中。如果情况并非如此,那么'ifelse()'显然是毫无意义的。 – 2014-11-14 17:46:39

+0

或使用'pmax()'? – hadley 2014-11-20 17:34:23