2016-10-19 1 views
0

나는 tidyr으로 잘 해나 가고 있습니다. ggplot2을 사용하여 플롯팅하기위한 anscombe 데이터 세트를 준비하는 더 좋은 방법이 있습니까? 특히 데이터를 추가하지 않아도됩니다 (obs_num). 어떻게 할거 니?tidyr :: pop_quiz : anscombe 데이터 집합을 재구성하는 더 빠르고 더 투명한 방법이 있습니까?

library(tidyverse) 
library(datasets) 

anscombe %>% 
    mutate(obs_num = 1:n()) %>% 
    gather(variable, value, -obs_num) %>% 
    separate(variable, c("variable", "set"), 1) %>% 
    spread(variable, value) %>% 
    ggplot(aes(x = x, y = y)) + 
    geom_point() + 
    stat_smooth(method = "lm", se = FALSE, fullrange = TRUE) + 
    facet_wrap(~set) 
+2

:

bind_cols(anscombe %>% select(matches("x")) %>% gather(set, "x"), anscombe %>% select(matches("y")) %>% gather(key, "y")) %>% select(-key) %>% mutate(set = gsub("x", "Set: ", set)) 

는 또 다른 옵션은 더 간결이다 기지 reshape을 사용하는 것입니다 다음 xy 값이 대응에서 끝날 경우가있는 경우 사실, 그것은 더 악화 될 수 있습니다 'pop_quiz'가 정말로 * tidyr *의 함수인지 얼마나 많은 사람들이 확인했는지 궁금합니다. 나는 그랬다. –

답변

0

spread을 호출 할 때 각 관찰을 고유하게 식별하려면 추가 열을 추가해야한다고 생각합니다. 해들리는 이것을 this SO question에 대한 논평에서 다루고 있습니다. 또 다른 방법은 아래 코드와 같이 xy 열을 별도로 스택하는 것이지만 사용자의 버전보다 더 나은 이유는 알 수 없습니다.

anscombe %>% 
    reshape(varying=1:8, direction="long", sep="", timevar="set") 
+0

'reshape'는 신비하고 강력합니다! 환상적인 원 라인 솔루션이며,이 경우 tidyverse 솔루션이 덜 불투명하다고 확신하지는 않습니다. –

+0

예, 신비한 기본 '모양새'를 찾습니다. 'tidyr'도 마찬가지로 여러 쌍의 대응하는 열을 처리 할 수 ​​있다면 좋을 것입니다. – eipi10

관련 문제