2016-09-15 3 views
1

checkboxGroupInput이있는 반짝이는 응용 프로그램을 만들고 있는데, 각 상자를 선택하면 주파수 줄거리에 다른 줄이 추가됩니다. 나는 이것을 가능하게하는 방법을 이해하기 위해 reshape2ggplot2 주위에 머리를 감싸려고 노력하고있다.shiny와 ggplot2를 사용하여 여러 줄을 대화 형으로 플롯

데이터 : 그래프는 date에 대응하는 X 축 있어야

dput(droplevels(head(testSet, 10))) 
structure(list(date = structure(c(16662, 16662, 16664, 
16664, 16664, 16665, 16665, 16665, 16666, 16666), class = "Date"), 
    store_id = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), product_id = c(1L, 
    3L, 1L, 2L, 3L, 3L, 1L, 2L, 1L, 2L), count = c(8L, 1L, 7L, 
    3L, 1L, 2L, 18L, 1L, 0L, 2L)), .Names = c("date", "store_id", 
"product_id", "count"), row.names = c(NA, 10L), class = "data.frame") 

count에 대응하는 Y 축 :

head(testSet) 
    date store_id product_id count 
1 2015-08-15  3  1  8 
2 2015-08-15  3  3  1 
3 2015-08-17  3  1  7 
4 2015-08-17  3  2  3 
5 2015-08-17  3  3  1 
6 2015-08-18  3  3  2 

클래스 레벨 정보. 제품을 나타내는 각 상자에 대해 product_id에 해당하는 줄이 그래프에 그려지는 확인란 그룹 입력을 원합니다. 데이터는 이미 store_id으로 필터링되었습니다.

첫 번째 생각은 플롯 내부에 for 루프를 작성하여 input$productId 벡터의 반환 값마다 새 geom_line()을 렌더링하는 것이 었습니다. 그러나 어떤 연구를 한 후에는 사물에 대해 잘못하는 것처럼 보입니다.

현재 melt()의 데이터를 유용하게 사용하려고 시도하고 있으며 aes(...group=product_id)이지만 시도하는 동안 오류가 발생합니다. 데이터 용융하려고

: meltSet

meltSet <- melt(testSet, id.vars="product_id", value.name="count", variable.name="date") 

헤드

head(meltSet) 
    product_id date count 
1  1 date 16662 
2  3 date 16662 
3  1 date 16664 
4  2 date 16664 
5  3 date 16664 
6  3 date 16665 

meltSet

의 꼬리
tail(meltSet) 
    product_id date count 
76  9  count  5 
77  1  count 19 
78  2  count  1 
79  3  count 39 
80  8  count  1 
81  9  count  4 

플로팅 :

enter image description here

그래서 내 축 값은 모든 남았습니다이고, 나는 플롯 설정에서 기대 아니에요 것.

+0

'melt'가 올바른 생각입니다. 코드 또는 오류 텍스트를 표시하지 않을 때 잘못된 것을 알기 란 매우 어렵습니다. 'melt()', 녹은 데이터 프레임의'head()','ggplot' 코드의 (단순한) 버전에 대한 정확한 코드를 보여주기 위해 편집하십시오. 오류가 발생했습니다. 'dput (droplet (head (testSet, 10)))'과 같이'dput()'으로 초기 데이터를 공유하면 컬럼의 클래스 정보도 공유 할 수 있습니다. 요인 또는 날짜 또는 숫자 또는 문자를 사용하는 경우 중요합니다. – Gregor

+0

'반짝 반짝 빛나는'관련 태그를 제거했습니다. 최종 목표는 빛나는 것처럼 보입니다. 그러나 이것은 단지 중간 단계 일뿐입니다. 이것이 반짝이는 응용 프로그램에서 끝날 것이라는 사실은 접하는 것 같습니다. – Gregor

+0

Thanks @ Gregor, 가장 최근의 시도로 질문을 업데이트했습니다. 그것을 지킬 것인가, 나는 나의 자료를 제대로 녹이지 않을 것이라고 확신한다. – huxfurpaw

답변

1

제대로 이해하고 있다면 녹을 필요가 없습니다. 날짜와 product_id를 합산하여 데이터를 집계하면됩니다. 이 목적을 위해 data.table 사용할 수 있습니다

testSet = data.table(testSet) 
aggrSet = testSet[, .(count=sum(count)), by=.(date, product_id)] 

당신은 aggrSet에 ggplot 물건을 할 수 있습니다. 여기에는 날짜, product_id, 카운트라는 세 개의 열이 있습니다.

마치 녹았을 때 date (date) 및 store_id (int)에 다른 유형의 두 변수를 병합했습니다.

관련 문제