2014-11-14 3 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 столбец, используя мутировать функцию, которая:если заявление и мутация

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 == min, emp будет присвоено значение EMPLTOT_N, так как вы не указали, что вы хотите в этом случае.

+0

Предостережение в начале вашего ответа не имеет смысла. Если отношение никогда не меньше «min», тогда только второй вектор будет присвоен «emp», поэтому не было бы никакой точки для этой операции. –

+0

@BondedDust На основании вопроса OP я предполагаю, что фактические данные содержат строки, в которых отношение меньше, чем 'min', и что это просто не отразилось на примере, который они предоставили. Если это не так, то да, 'ifelse()', очевидно, бессмысленно. –

+0

Или используйте 'pmax()'? – hadley

Смежные вопросы