2016-07-13 2 views
-1

Для каждого предмета, одно наблюдение (или строка) удерживается на основе следующих:выберите наблюдения, основанные на нескольких условиях

, если var2=c and var3=B затем сохранить это наблюдение. если нет, проверьте if var2=c and var3=S и соблюдайте это наблюдение. если нет, то проверьте, если var2=L and var3=B, , наконец, проверьте var2=L and var3=S, если не ставить 0.

Любая помощь будет оценена.

Мои данные выглядит следующим образом:

id var1 var2 var3 
1 100 L S 
1 100 L B 
1 2 C B 
1 2 C S 
2 5 C S 
2 10 L S 
2 NA L B 
2 NA C B 

Мой желаемый результат:

id var1 var2 var3 
1 2 C B 
2 5 C S 
+0

Я не понимаю ... Можете ли вы объяснить условия лучше, пожалуйста? – Sotos

+0

http://stackoverflow.com/help/mcve –

+0

Первый блок кода - где вы показываете присвоение значений - не имеет смысла. Например, «var2 = c и var3 = B, если нет». Что значит «если не тогда»? Что тестируется здесь? Вы имеете в виду «' if (var3 == "B") {var2 <- "c"} '", и если это не так, то ваш следующий оператор и т. Д.? –

ответ

0

Вот идея использования dplyr,

library(dplyr) 
x <- c('CB', 'CS', 'LB', 'LS') #vector with conditions 
df %>% 
    group_by(id) %>% 
    na.omit() %>% 
    slice(order(match(paste0(var2, var3), x))[1]) 

#Source: local data frame [2 x 4] 
#Groups: id [2] 

#  id var1 var2 var3 
# <int> <int> <fctr> <fctr> 
#1  1  2  C  B 
#2  2  5  C  S 

DATA

dput(df) 
structure(list(id = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), var1 = c(100L, 
100L, 2L, 2L, 5L, 10L, NA, NA), var2 = structure(c(2L, 2L, 1L, 
1L, 1L, 2L, 2L, 1L), .Label = c("C", "L"), class = "factor"), 
    var3 = structure(c(2L, 1L, 1L, 2L, 2L, 2L, 1L, 1L), .Label = c("B", 
    "S"), class = "factor")), .Names = c("id", "var1", "var2", 
"var3"), class = "data.frame", row.names = c(NA, -8L)) 
+0

Спасибо. вы имеете в виду условие CB должно быть объединено ?? – sri

+0

@sri Это не нужно сочетать, но сравнивать легче и «совместить» на основе «важности», – Sotos

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