2017-01-25 1 views
0

이 질문은 reordering groups with dataframe과 비슷한 질문이지만 둘 이상의 변수가 다릅니다. 데이터 예 :R : 여러 변수 그룹 재정렬

raw <- "Date   Response  ZNumber  Latency ZPV 
     2016-05-04 1   1   445.562 59.666 
     2016-05-04 2   1   433.890 97.285 
     2016-05-04 3   1   372.073 53.994 
     2016-05-04 4   1   282.337 89.686 
     2016-05-04 4   2   333.186 57.471 
     2016-05-04 5   1   320.500 71.968 
     2016-05-04 5   2   280.818 49.187 
     2016-07-14 1   1   411.849 65.539 
     2016-07-14 2   1   346.814 50.626" 
data <- read.table(text=raw, header = TRUE) 

'Date-Response-ZNumber'및 'Latency-ZPV'는 항상 올바르게 연관되어 있습니다. 날짜 - 응답 당 ZNumber 순서는 대기 시간의 오름차순으로 정의해야합니다.

내 데이터의 문제는 날짜 - 응답에 둘 이상의 ZNumber가있는 경우 대기 시간 순서 이 ZNumber 순서와 일치하지 않는 경우가 있습니다. Date = 2016-05-04, Response = 4는 ZNumber와 Latency 모두에서 오름차순을 갖지만 Date = 2016-05-04, Response = 5는 대기 시간이 내림차순 인 동안 ZNumber가 오름차순입니다.

올바른 분할 적용 조합 작업을 찾을 수 없습니다.


출력 내가 수행 싶은 것이

는 ZNumber과 대기 시간 모두가 '날짜 - 응답'그룹 예를 들어, 내 함께 상승하는 것입니다 날짜 = 2016년 5월 4일, 응답 = 5

"Date   Response  ZNumber  Latency ZPV 
2016-05-04 1   1   445.562 59.666 
2016-05-04 2   1   433.890 97.285 
2016-05-04 3   1   372.073 53.994 
2016-05-04 4   1   282.337 89.686 
2016-05-04 4   2   333.186 57.471 
2016-05-04 5   1   280.818 49.187 
2016-05-04 5   2   320.500 71.968 
2016-07-14 1   1   411.849 65.539 
2016-07-14 2   1   346.814 50.626" 

dplyr 등 아래와 같이 해결하기

수많은 시도, 근무 한 적이없는 ...

library(dplyr) 

data <- data %>% 
group_by(Date, Response) %>% 
arrange(Latency, ZNumber) %>% 
arrange(Date, Response) 

또는 위의 링크 된 질문에서 제안한대로 ...

data <- data %>% 
arrange(df, group, desc(value)) 

다양한 '돌연변이 조인'이 성공하지 못했습니다. 예 :

data <- data %>% 
    group_by(Date,Response) %>% 
    select(Latency) %>% 
    arrange(Latency) %>% 
    arrange(Response) %>% 
    full_join(data,by=c("Date","Response")) 

그러나 이제 두 개의 대기 시간 열이 있습니다.


sessionInfo() 
R version 3.3.2 (2016-10-31) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 
Running under: Windows 7 x64 (build 7601) Service Pack 1 
other attached packages: 
[1] dplyr_0.5.0 
loaded via a namespace (and not attached): 
[1] lazyeval_0.2.0 magrittr_1.5 R6_2.2.0  assertthat_0.1 DBI_0.5-1  
[6] tools_3.3.2 tibble_1.2  Rcpp_0.12.8 
+0

그건 그냥 데이터입니다. 주문은 데이터 포인트를 조작하지 않습니다. * Response * # 5, * ZNumber *는 항상 상승하고 * Latency *는 내려갑니다. 하나와 다른 카운터를 정렬하십시오. 날 믿지 않니? 원하는 출력 결과를 표시하여 데이터 셀 변경을 요청하는지 확인할 수 있습니다. – Parfait

+0

예, 예 - 원하는 출력으로 편집했습니다. 작업을 명확히하려고 시도했습니다. –

답변

0

나는 최소한의 스크립트 좋은 쉽게 작동 data.table와 솔루션을

raw <- "Date   Response  ZNumber  Latency ZPV 
     2016-05-04 1   1   445.562 59.666 
2016-05-04 2   1   433.890 97.285 
2016-05-04 3   1   372.073 53.994 
2016-05-04 4   1   282.337 89.686 
2016-05-04 4   2   333.186 57.471 
2016-05-04 5   1   320.500 71.968 
2016-05-04 5   2   280.818 49.187 
2016-07-14 1   1   411.849 65.539 
2016-07-14 2   1   346.814 50.626" 
data <- read.table(text=raw, header = TRUE) 
library(data.table) 
data <- data.table(data) 
data <- data[order(as.numeric(Latency))] 
data[,new_ZNumber:=1:length(Latency),by=.(Date,Response)] 
data <- data[order(Date,as.numeric(Response),as.numeric(Latency))] 
data 

출력 :

ddply 당신이 원하는 일을하지 않는 이유
  Date Response ZNumber Latency ZPV new_ZNumber 
1: 2016-05-04  1  1 445.562 59.666   1 
2: 2016-05-04  2  1 433.890 97.285   1 
3: 2016-05-04  3  1 372.073 53.994   1 
4: 2016-05-04  4  1 282.337 89.686   1 
5: 2016-05-04  4  2 333.186 57.471   2 
6: 2016-05-04  5  2 280.818 49.187   1 
7: 2016-05-04  5  1 320.500 71.968   2 
8: 2016-07-14  1  1 411.849 65.539   1 
9: 2016-07-14  2  1 346.814 50.626   1 

확실하지 않음 그러나 이것이 당신이 염두에 두었던 것이라면 저에게 알려주십시오.

편집 : OP 요청에 따라 이라는 수정 된 ZNumber이 추가되었습니다.

+0

OP가 묻습니다 : * ZNumber와 대기 시간이 모두 '날짜 - 응답'그룹과 함께 오름차순으로 표시됩니다. 솔루션의 응답 # 5에 대해 * ZNumber *가 내려갑니다. OP는 모든 레코드에서 불가능한 순서로 데이터를 강제 실행합니다. – Parfait

+0

예 OP 질문에 대한 귀하의 의견을 보았습니다. 당신은 옳습니다. 하지만 당신이 지적한 이유 때문에 그 일을 할 수있는 것도 없습니다. – JustGettinStarted

+0

응답 그룹 # 5에서 지연과 ZNumber가 오름차순이 아닌 @Parfait에 의해 지적되었습니다 ... –