2017-10-30 1 views
2

에 행을 열로십시오 :사용 dplyr/tidyr 내가이 같은 데이터 프레임이 R 데이터 프레임

year <-c(floor(runif(100,min=2015, max=2017))) 
month <- c(floor(runif(100, min=1, max=13))) 
inch <- c(floor(runif(100, min=0, max=10))) 
mm <- c(floor(runif(100, min=0, max=100))) 
df = data.frame(year, month, inch, mm); 

year month inch mm 
2016 11 0 10 
2015  9 3 34 
2016  6 3 33 
2015  8 0 77 
year, month에 대한 난 단지 걱정

mm을.

데이터 프레임을 다시 정렬해야 첫 번째 열이 월 이름이고 나머지 열은 mm 값이됩니다.

Months 2015 2016 
Jan  # # 
Feb 
Mar 
Apr 
May 
Jun 
Jul 
Aug 
Sep 
Oct 
Nov 
Dec 

그래서 두 가지 일이 발생해야합니다. (1) 달은 처음 세 글자의 문자열이되어야합니다. (2) 연도별로 그룹화 한 다음 해당 연도의 열에 mm 값을 입력해야합니다.

지금까지 나는이 코드를 가지고,하지만 난 그것을 알아낼 수 없습니다 :

df %>% 
    select(-inch) %>% 
    group_by(month) %>% 
    summarize(mm = mm) %>% 
    ungroup() 
+2

, 그것은'xtabs (mm ~ 월 + 년, 데이터 = 안양)' – thelatemail

답변

6

month.abb을 참조 할 수 있습니다, 이름에 달 변환하려면; 그리고 당신은 다양한 형식으로 연도와 월, spread으로 요약 할 수 있습니다 : 기본 R에서

library(dplyr) 
library(tidyr) 
df %>% 
    group_by(year, month = month.abb[month]) %>% 
    summarise(mm = mean(mm)) %>% # use mean as an example, could also be sum or other 
            # intended aggregation methods 
    spread(year, mm) %>% 
    arrange(match(month, month.abb)) # rearrange month in chronological order 

# A tibble: 12 x 3 
# month `2015` `2016` 
# <chr> <dbl> <dbl> 
# 1 Jan 65.50000 28.14286 
# 2 Feb 54.40000 30.00000 
# 3 Mar 23.50000 95.00000 
# 4 Apr 7.00000 43.60000 
# 5 May 45.33333 44.50000 
# 6 Jun 70.33333 63.16667 
# 7 Jul 72.83333 52.00000 
# 8 Aug 53.66667 66.50000 
# 9 Sep 51.00000 64.40000 
#10 Oct 74.00000 39.66667 
#11 Nov 66.20000 58.71429 
#12 Dec 38.25000 51.50000 
+0

우수함입니다! 그렇다면 출력을 csv로 저장하려면 어떻게해야합니까? – JAG2024

+0

'write.csv'를 사용하십시오. 위의 변환 후에'%> % write.csv ('test.csv') 체인이 작동해야합니다. – Psidom