Возвращает значение из строки, если выполняется несколько условий - PullRequest
0 голосов
/ 31 октября 2019

У меня есть следующий фиктивный Df:

structure(list(lat = c(15.04166667, 15.125, 15.29166667, 15.375, 
15.04166667, 15.125, 15.20833333, 15.29166667, 15.375, 15.45833333, 
15.54166667, 14.95833333, 15.04166667, 15.125, 15.20833333, 15.29166667, 
15.375, 15.45833333, 15.54166667, 15.625, 15.70833333, 15.79166667, 
15.875, 16.54166667, 13.875, 14.875, 14.95833333), lon = c(48.95833333, 
48.95833333, 48.95833333, 48.95833333, 48.875, 48.875, 48.875, 
48.875, 48.875, 48.875, 48.875, 48.79166667, 48.79166667, 48.79166667, 
48.79166667, 48.79166667, 48.79166667, 48.79166667, 48.79166667, 
48.79166667, 48.79166667, 48.79166667, 48.79166667, 48.79166667, 
48.70833333, 48.70833333, 48.70833333), Var1 = c(40L, 40L, 40L, 
40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 
40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L), Var2 = c(29.76510459, 
6.480850609, 223.0983795, 203.8934788, 11.27195619, 65.76071468, 
194.8171225, 262.4171485, 171.163622, 240.1846431, 239.8467942, 
53.94738807, 49.07189175, 118.194278, 218.744134, 313.4466307, 
185.409121, 252.8829675, 219.123076, 211.2351477, 279.0554084, 
260.621935, 169.9482421, 337.1199379, 9.932910029, 96.11876075, 
69.54847552), Var3 = c(6.24087876, 1.358846252, 46.77725586, 
42.75054481, 2.363402045, 13.78811339, 40.84749728, 55.02126264, 
35.88804325, 50.35974897, 50.28891223, 12.29369073, 10.28895202, 
24.78191063, 45.86429711, 65.72066044, 38.87491352, 53.02222021, 
45.94375161, 44.28987901, 58.50982373, 54.64485812, 35.63321409, 
70.68427011, 1.731396537, 20.15331521, 14.58229774), Var4 = c(173.4664468, 
173.4706729, 173.4790964, 173.4833057, 173.4077614, 173.4117034, 
173.4156335, 173.4195758, 173.4235096, 173.4266725, 164.1875386, 
239.5356333, 173.3490717, 173.3527418, 173.3563883, 173.3600476, 
173.3637073, 173.3667678, 164.1276972, 164.1295668, 164.1308363, 
164.1321065, 164.1333879, 167.3271206, 150.2922712, 224.8818893, 
224.8852899), Var5 = c(19.62146524, 19.62146505, 19.62146589, 
19.62146616, 19.62146629, 19.62146473, 19.62146495, 19.62146552, 
19.62146614, 19.62146513, 16.76539618, 38.78913858, 19.62146615, 
19.62146541, 19.62146505, 19.62146575, 19.62146599, 19.62146573, 
16.76539594, 16.76539677, 16.7653963, 16.76539632, 16.76539658, 
17.25115902, 11.78819987, 34.82506079, 34.82506128), var6 = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "High", class = "factor"), 
    var7 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L), .Label = "HIGH RISK", class = "factor")), class = "data.frame", row.names = c(NA, 
-27L))

Что я хочу сделать, это создать новую переменную с именем var8, которая возвращает Var2, только если Var6 имеет значение "High" и Var7 имеет значение "HIGH RISK", в противном случае возвращаетничего. Обратите внимание, что у var6 и var7 есть другой фактор (например, Low, Medium, SAFE ..), который не приведен в примере.

Я пробовал это, но он возвращает значение TRUE или FALSE, тогда как я хочу получить значение изVAr 2 только в случае, если оно ИСТИНА и 0, если ЛОЖЬ.

  df<- df %>% 
        mutate( Area.HRH=Var6 =="High"  & 
        (Var7== "HIGH RISK"))

Спасибо!

Ответы [ 2 ]

1 голос
/ 31 октября 2019

Это можно решить в базе R с помощью одного оператора ifelse().

df$var8 <- ifelse(df[, "var6"] == "High" & df[, "var7"] == "HIGH RISK",
                  df[, "Var2"],
                  0)
1 голос
/ 31 октября 2019

Я думаю, что вы хотите использовать if_else().

library(dplyr)

df %>% 
  mutate(Area.HRH = if_else(var6 =="High" & var7== "HIGH RISK", Var2, NULL))

Вы можете легко изменить то, что хотите, чтобы критерии FALSE возвращались. Это вернет ноль вместо NULL.

df %>% 
  mutate(Area.HRH = if_else(var6 =="High" & var7== "HIGH RISK", Var2, 0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...