2016-08-01 2 views
0

dplyr의 arrange()가 잘못된 결과를 생성합니다.dplyr에서 정렬하면 잘못된 출력이 발생합니다.

library(dplyr) 
x <- as.data.frame(cbind(name=c("A","B","C","D"), val=c(0.032, 0.077, 0.4, 0.0001))) 
x.1 <- x %>% arrange(val) 
x.2 <- x %>% arrange(desc(val)) 

출력은 :

name val 
1 A 0.032 
2 B 0.077 
3 C 0.4 
4 D 1e-04 

>x.1 
    name val 
1 A 0.032 
2 B 0.077 
3 C 0.4 
4 D 1e-04 

> x.2 
    name  val 
1 D 1e-04 
2 C 0.4 
3 B 0.077 
4 A 0.032 

오름차순 정렬 잘못된 출력을 생성 내림차순 양쪽 모두. 내가 여기서 뭘 잘못하고 있는지 확실하지 않니? 감사합니다.

+3

as.data.frame (cbind())는 잘못된 작업입니다. 모든 것은'cbind()'에서 문자로 변환 된 다음'as.data.frame() '에서 인수 분해됩니다. 'data.frame()'을 사용하여 데이터 프레임을 생성하십시오. 그것이 그 이유입니다. –

+2

이러한 종류의 문제가 발생하면 변수의 클래스를 확인하기 위해'str'을 사용하는 것이 좋습니다. 현재 귀하의 변수는 위에서 언급 한 이유에 의한 요인입니다. – Sumedh

+0

@RichardScriven Reopened. 내가 게시하는 답변도 여러 번 발생합니다. – akrun

답변

3

as.data.frame(cbind()) 당신이 잘못하고있는 것입니다. 모든 것은 cbind()에서 문자로 변환 된 다음 as.data.frame()을 인수로 사용합니다. 사람들이 데이터 프레임을 만드는이 방법을 배우는 곳 모르겠어요

str(x) 
# 'data.frame': 4 obs. of 2 variables: 
# $ name: Factor w/ 4 levels "A","B","C","D": 1 2 3 4 
# $ val : Factor w/ 4 levels "0.032","0.077",..: 1 2 3 4 

... 보라,하지만 끔찍한 관행이고 사용해서는 안됩니다. 거기 왜

사용 data.frame()가 그건, 데이터 프레임을 생성 ( dplyr 를 사용하는 경우 나뿐만 아니라 data_frame()있다).

library(dplyr) 
x <- data.frame(name=c("A","B","C","D"), val=c(0.032, 0.077, 0.4, 0.0001)) 
x.1 <- x %>% arrange(val) 
x.2 <- x %>% arrange(desc(val)) 

x.1 
# name val 
# 1 D 0.0001 
# 2 A 0.0320 
# 3 B 0.0770 
# 4 C 0.4000 

x.2 
# name val 
# 1 C 0.4000 
# 2 B 0.0770 
# 3 A 0.0320 
# 4 D 0.0001 
관련 문제