2014-11-14 84 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