2015-03-25 5 views
2

Скажем, у меня есть данные следующим образомdplyr group_by абс() фильтрация данных

A <- c(1,1,1,2,2,2,3,3,3) 
B <- c(1,0,0,1,0,0,1,0,0) 
C <- c(8,7,6,8,7,8,9,9,11) 

D <- data.frame(A,B,C) 
D 

library(dplyr) 

E <- D %>% 
    group_by(B) %>% 
    filter(abs(diff(C)) <= 1) 

, чтобы удалить эти случаи, так что показанные желтым цветом, удаляются

enter image description here

другими словами, для каждого a, когда мы оцениваем b=0 относительно b=1, любые значения, в которых c превышают разницу в размере 1.

ответ

5

На основании описания я думаю, что вы хотите что-то вроде этого:

D %>% 
    group_by(A) %>% 
    filter(abs(C - C[B == 1]) <= 1) 
#Source: local data frame [7 x 3] 
#Groups: A 
# 
# A B C 
#1 1 1 8 
#2 1 0 7 
#3 2 1 8 
#4 2 0 7 
#5 2 0 8 
#6 3 1 9 
#7 3 0 9 
+0

большое, спасибо за решение. Я понимаю, как вы использовали квадратные скобки! – lukeg

+0

@ lukeg, рад, что это помогло :) Также не забудьте отметить, что вам нужно сгруппировать А в этом случае. –

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