2017-04-18 1 views
0

다음은 내 DF의 예입니다.개월 단위로 R에 플롯 만들기

count month 
3  2014-10-01 
4  2014-15-01 
3  2014-13-02 
12 2014-14-02 
12 2014-18-04 

나는 y 축의 카운트를 제공하는 R로 플롯을 생성하려고합니다. 나는 x 축에 달을 갖고 싶어하지만 난 사람이 가야하는 방법을 알고 있나요 방법 등

> likes <- plot(seq_along(DF$month),DF$count, type = "l",axes = FALSE, lab = "", lab = "Counts")

그룹 모두 함께 1월 개월, 함께 월 달 ... 알아낼 수 없습니다 ?

+0

당신은 [yearmon 객체]로 (HTTPS를 날짜를 변환 시도 할 수 있습니다 : // www.rdocumentation.org/packages/zoo/versions/1.7-14/topics/yearmon).이 요소는 요인과 유사하게 행동하기 때문에 쉽게 그룹화 할 수 있습니다. – cylim

답변

0

또는 기본 R과 ggplot2 솔루션 :

# date object 
d$month2 <- as.Date(as.character(d$month), "%Y-%d-%m") 
> str(d) 
'data.frame': 5 obs. of 3 variables: 
    $ count : int 3 4 3 12 12 
$ month : Factor w/ 5 levels "2014-10-01","2014-13-02",..: 1 4 2 3 5 
$ month2: Date, format: "2014-01-10" "2014-01-15" "2014-02-13" "2014-02-14" ... 

# per month 
res <- aggregate(d$count, list(months(d$month2)), sum) 
# again a date object 
res$month <- as.Date(paste0("01-", res$Group.1, "-2014"), "%d-%B-%Y") 
# plot 
ggplot(res, aes(x= month, y=x)) + 
    geom_point() + geom_line() + 
    scale_x_date(date_minor_breaks = "1 month",date_labels = "%B") 

enter image description here

당신은 또한 모두, 바 플롯 당 포인트 카운트와 같은 원시 데이터를 포함하도록 시도 할 수 있습니다 :

ggplot(d, aes(x= month2, y=count)) + 
    geom_point(col="red") + 
    scale_x_date(date_minor_breaks = "1 month",date_labels = "%B") + 
    geom_bar(data = res, aes(x= month, y=x),stat = "identity", position = 'identity',width=0.5) 

enter image description here

+0

그러나 실제 데이터 세트에서이 코드를 사용하면 고맙습니다. jan, feb, march ... 대신에 모든 카운트가 계산됩니다. 이유는 무엇입니까? – Ashley

+0

'months (d $ month2)'가 다른 달 이름을 가진 벡터를 제공하는지 확인하십시오. 뭔가가 날짜 변환과 함께 잘못 진행되지 않았다면 이전 단계 일 것입니다. 'str (your_data)'를 확인하십시오. – Jimbou

+0

감사합니다. 문제를 발견했습니다. 위대한 작품 – Ashley

0

기본적으로 월별로 집계하려고합니다. 그러나 이것은 당신에게 시간 계열을 제공하지 않습니다. 그것은 당신에게 주문한 요인을 줄 것입니다. 그 방법을 그릴거야. 먼저 dplyrlubridate을 사용하여 월별로 summarise입니다. 그런 다음 x 축에 대해 월 요소를 숫자로 변환하지만 플롯하지 않습니다 (xaxt="n"). 나중에 axis으로 올바른 형식으로 다시 추가합니다.

df1 <- read.table(text="count month 
3  2014-10-01 
4  2014-15-01 
3  2014-13-02 
12 2014-14-02 
12 2014-18-04",header=TRUE,stringsAsFactors=TRUE) 

library(dplyr);library(lubridate) 
DF <- df1%>% 
group_by(month=month(ydm(month), label = TRUE))%>% 
summarise(count=sum(count)) 

plot(as.numeric(DF$month),DF$count, type = "l",xaxt="n",main = "Counts") 
axis(side=1,at=as.numeric(DF$month),labels=DF$month) 

enter image description here

+0

이것이 내가 찾고있는 것입니다. 고마워요. 'DF <- df1%> % group_by (월 = ydm (월), label = TRUE)) %> % summary (count = sum (count))'이 오류가 발생합니다. 오류 : 강제 변환 할 수 없습니다. '문자'타입의 벡터에 '클로저' – Ashley

+0

@Ashley 실제 데이터를 참조한다고 가정하면'str (df1)'을 확인하십시오. 날짜는 날짜 형식이어야합니다. 필요하다면'df1 $ month <-as.Date (df1 $ month)'를 미리 사용하십시오. –

+0

고맙습니다. 나는 내 코드에서 작은 실수를 저지르고 있다는 것을 알고있다. 그러나 나는 group_by를 실행하고 명령을 요약 한 후에 DF를 볼 때 1 월의 월에 대한 총 카운트 만보고있다. 내 실제 DF에서 날짜 열의 레이블은 '월'입니다. 내 group_by 문은 다음과 같아야합니까? 'group_by (월 = ydm (월), label = TRUE)) %> %' – Ashley

0

추가 패키지가없는 솔루션, 달의 시작을 도입 (또는 -15와 중간) :

df <- data.frame(count=c(3,4,3,12,12), day=c("2014-10-01", "2014-15-01", "2014-13-02", "2014-14-02", "2014-18-04")) 

df$day<-as.Date(df$day, format="%Y-%d-%m") 
df$month<-as.Date(format(df$day, "%Y-%m-01")) 
df2<-aggregate(count~month, data=df, FUN=sum) 
plot(df2$month, df2$count, typ="o")` 
관련 문제