다음과 같은 데이터 프레임이 있습니다.
a<-c(1,1,-1,1,-1,1,-1,1,1,1,1)
b<-c(100,200,50,100,78,45,78,34,56,32,45)
c<-c(3,2,4,1,3,2,1,3,5,1,2)
d<-c(3400,3403,3407,3408,3412,3423,3436,3245,3234,3456,2345)
df<-cbind(a,b,c,d)
df
a b c d
[1,] 1 100 3 3400
[2,] 1 200 2 3403
[3,] -1 50 4 3407
[4,] 1 100 1 3408
[5,] -1 78 3 3412
[6,] 1 45 2 3423
[7,] -1 78 1 3436
[8,] 1 34 3 3245
[9,] 1 56 5 3234
[10,] 1 32 1 3456
[11,] 1 45 2 2345
더 많은 행을 포함합니다. 다음과 같은 방식으로 필터링하고 싶습니다. 열 c = 3 인 경우 c = 3 열과 동일한 a 및 b 열 값을 가진 다음 행을 찾고 있습니다. c 열 값은 1이어야하고 그 두 열 사이에 있어야합니다. 행 d 열에 10 미만의 차이가 있어야합니다.
따라서 제공된 샘플에서 출력은 다음과 같아야합니다.
a b c d
[1,] 1 100 3 3400
[4,] 1 100 1 3408
a 및 b 열의 값이 같으므로 c 열의 값은 3 다음에 1이고 d 값 사이에는 10 미만의 차이가 있습니다. 예를 들어,
a b c d
[5,] -1 78 3 3412
[7,] -1 78 1 3436
d 열에서 값 간의 차이가 10보다 크므로 출력에 포함되지 않아야합니다.
그것을 구현할 가능성이 있습니까? 어리석은 질문이라면 죄송합니다. 저는 R을 처음 사용합니다.
편집 : 새 데이터 프레임 :
a b c d
[1,] 1 100 1 3400
[2,] 1 200 2 3403
[3,] -1 50 4 3407
[4,] 1 100 3 3408
[5,] -1 78 3 3412
[6,] 1 45 2 3423
[7,] -1 78 1 3436
[8,] -1 34 3 3445
[9,] 1 56 5 3234
[10,] -1 34 1 3454
[11,] 1 45 2 3645
요망되는 결과:
[8,] -1 34 3 3445
[10,] -1 34 1 3454
첫 번째 행의 c 열 = 3 인 쌍만 고려되어야하며 첫 번째 행에 열 c 항목 = 1이 있고 두 번째 행에 항목 = 3이있는 경우가 아닙니다.
data.frame으로 변환 한 다음 filter
library(dplyr)
df %>%
filter(c %in% c(3, 1)) %>%
group_by(a, b) %>%
filter(first(c) == 3, any(diff(d) < 10)) %>%
ungroup
# A tibble: 2 x 4
# a b c d
# <dbl> <dbl> <dbl> <dbl>
#1 1 34 3 3445
#2 1 34 1 3454
df<- data.frame(a,b,c,d)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다