중복 된 x 값이있는 데이터 프레임이 있습니다. 이러한 값은 범위와 관련이 있습니다. 복사 된 값 (중복 된 x 값)과 겹치는 범위 (두 행 모두 위쪽 및 아래쪽 열에 겹쳐져 있음)는 삭제해야하지만 참조하는 값 (val 열)을 유지하려고합니다.중복 된 값에서 중복되는 범위를 제거하고 연결된 값을 유지하는 방법은 무엇입니까?
library(dplyr)
df = data.frame(x=c("A","A","A","B","B","B","C"),
low = c(-10,-5,100,100,200,300,10),
up = c(2,3,200,150,250,350,20),
val = c(1,2,150,125,225,325,15))
df
x low up val
1 A -10 2 1
2 A -5 3 2
3 A 100 200 150
4 B 100 150 125
5 B 200 250 225
6 B 300 350 325
7 C 10 20 15
줄 1과 2가 겹쳐 있습니다. the example here을 봅니다. 나는 dplyr 코드를 작성하려고했지만 기대했던 결과를 얻지 못했습니다. 이 예제와의 차이점은 두 데이터 세트를 "병합"하지 않는다는 것입니다. 따라서 중복 값이 포함 된 데이터 집합 내에서 여러 범위를 테스트하는 방법을 모르겠습니다. 중복 된 값을 데이터 세트로 그룹화하고 개별적으로 테스트하려고했습니다. 하지만 dplyr 함수에 통합되지 않았기 때문에 작동하지 않는 것 같습니다. 결국
df.gr = df %>%
group_by(x)
df.gr[with(df.gr, low <= up),]
, 나는 당신이이 개 범위의 가장 높은 중복, 나는 가장 낮은 값을 유지하고있어있는 범위,보고, 수 있듯이이
x low up val
1 A -10 3 1,2
2 A 100 200 150
3 B 100 150 125
4 B 200 250 225
5 B 300 350 325
6 C 10 20 15
뭔가를 원하는 . 또한 "val"열의 값을 "기억"하고 싶습니다. 그래서 겹치는 범위에서 1,2로 끝내고 싶습니다.
또한 여기서 인용 한 예에서 각 중복 값에 대해 2 개의 범위 만있었습니다. 제 경우에는 중복 된 값이 2 개 이상일 수 있습니다. 난 중복 값을 테스트하고 그들의 범위를 테스트하고 그들이 겹치는 지 확인하고 싶습니다. 예를 들어
,df = data.frame(x=c("A","A","A","A","B","B","B","C"),
low = c(-10,-5,-2,100,100,200,300,10),
up = c(2,3,4,200,150,250,350,20),
val = c(1,2,3,150,125,225,325,15))
df
x low up val
1 A -10 2 1
2 A -5 3 2
3 A -2 4 3
4 A 100 200 150
5 B 100 150 125
6 B 200 250 225
7 B 300 350 325
8 C 10 20 15
는 줄 것인가 : 나는 경우,
tidyr::spread(df,x,val)
low up A B C
1 -10 2 1 NA NA
2 -5 3 2 NA NA
3 -2 4 3 NA NA
4 10 20 NA NA 15
5 100 150 NA 125 NA
6 100 200 150 NA NA
7 200 250 NA 225 NA
8 300 350 NA 325 NA
기본적으로 :
x low up val
1 A -10 4 1,2,3
2 A 100 200 150
3 B 100 150 125
4 B 200 250 225
5 B 300 350 325
6 C 10 20 15
나는 또한 운없이 깔끔한에 spread
기능을 사용하려고했습니다 이것을 사용하려면 키로 넣어야합니다. 모두 th 전자 열과 낮은 열,하지만 난 그것을 할 수 없습니다. 또한 각 중복 값의 겹치는 수는 데이터 그램 변수의 크기가 다른 열을 만들 때 달라집니다. 그래서 나는 이걸 어떻게 진행해야할지 모르겠다. ...
하나의 연결된 행에 여러 번 같은 값을 가질 수 있습니까? 1,2,2,3와 같은? –
아니요, x의 동일한 중복 값에 대해 두 번째 val이 동일하지 않습니다. –
일반적으로 좀 더 우아한 해결책으로 답변을 업데이트했습니다. –