본문 바로가기

R 프로그래밍

R 응용 - 정선해양관측정보 10년 데이터 통합 및 헤더명 수정

 

정선해양관측자료 10년 데이터 통합 및 헤더명 수정 후 CSV 파일로 저장하기
  • 기간 : 2011년~2021년

 

# 10년치 관측자료 내려받기 

 

관측자료 출처 : https://www.nifs.go.kr/kodc/soo_list.kodc 

-> 최대 1년치 자료만 받을 수 있으므로 1년단위로 검색하여 엑셀파일로 내려받기 

2011~2020까지 내려받은 엑셀파일

 

```{r}
library(tidyverse); library(readxl); library(data.table); library(lubridate)

```

 

# 특정위치 파일리스트 읽어서 한 개 파일로 합치기

  (합칠 데이터는 모두 동일한 포맷을 전제하여야 함)

 

```{r}
start_time <-Sys.time()
dir <-("E:\\r_workspace\\jungsun\\datas")
file_list<-list.files(dir)
data<-data.table()

for(file in file_list) {
  #print(file)
  temp <- read_xls(paste(dir, sep="/", file), skip=2, col_type="guess", col_names=FALSE, sheet=NULL)
  data <- rbind(data,temp)
  rm(temp)
  #rm 변수를 지우는 것 
}
finish_time <-Sys.time()
finish_time - start_time
#read_xls()옵션 중 sheet="정선해양관측정보" 일 경우 에러 발생

head(data)
```

 

# 헤더명 변경 및 수치형 컬럼 재정의

```{r}
data1<- as.data.frame(data)
str(data1); sapply(data1, class)
names(data1) <-c("sea", "l_name", "s_name", "ls_name", "lat", "lon","daytime","depth","temp","temp_flag", "salinity", "salinity_flag","DO","DO_flag","qc_lvl","PO4P","NO2","NN","SiO2_Si","pH","trans","atmosp","vessel")
str(data1)
data1[, c(5:6,8:22)] <-as.numeric(unlist(data1[,c(5:6,8:22)])) #수치형 컬럼 재정의
str(data1)
```

 

 

 

# lubridate 패키지를 이용하여 년월일 분리컬럼 생성하기

```{r}
library(dplyr)
data1$daytime <-as.POSIXct(data1$daytime, tz="KST")
str(data1)
data1 <-data1 %>% mutate(yr=year(daytime),
                        mon=sprintf("%02d", month(daytime)),
                        day=sprintf("%02d", day(daytime)))
data1
```

 

```{r}

remove(data)
```

 

# 조건에 맞는 데이터 추출하여 분리하기 (서해, 2011~2020년, 2월, 8월)

```{r}
west_sea<-data1 %>%
  filter(sea=="서해", (yr>=2011& yr<2021), depth==0, (mon=="02" | mon=="08")) %>%
  arrange(yr, mon, ls_name)
west_sea

w2<-west_sea %>% filter(mon=="02") %>% group_by(ls_name, lat, lon) %>%
  summarise(avg_temp=mean(temp, na.ra=T))

w8<-west_sea %>% filter(mon=="08") %>% group_by(ls_name, lat, lon) %>%
  summarise(avg_temp=mean(temp, na.ra=T))


fwrite(west_sea, "E:\\r_workspace\\jungsun\\west_sea_28.csv", sep=",", col.name=TRUE)
```