오늘은 R을 활용하여 공간데이터를 가공해보았습니다.
문제상황
건물 데이터를 사용하려 하는데 너무 데이터가 무거웠어요. 그래서 열들을 좀 정리하고 싶었는데요, ArcMAP에서 열 하나하나를 지우면 시간이 너무 오래 걸릴 거 같았어요.
그래서 R에서 가공한 후 다시 ArcMAP으로 열어보았습니다.
해결방법
0. 전체 코드
#불러오기
library(sf)
setwd("C:\\Users\\user\\OneDrive - SNU\\바탕 화면\\폴더명")
building <- st_read("서울_건물_AL_11_D010_20220702\\건물연도.shp")
#가공
building<-subset(building, select = c(A1,A2,A3,A13))
#열 새롭게 만들기
library(dplyr)
building<-mutate(building, year=substr(building$A13, 1, 4))
#내보내기
st_write(building, "building.shp")
1. sf 패키지 이용하여 SHP 파일 불러오기
library(sf)
setwd("C:\\Users\\user\\OneDrive - SNU\\바탕 화면\\폴더명")
building <- st_read("서울_건물_AL_11_D010_20220702\\건물연도.shp")
먼저 공간 자료를 다룰 수 있는 sf 패키지를 불러옵니다.
working directory 설정도 해주었어요.
sf 패키지에서 shp 파일을 불러올 수 있는 st_read 함수를 사용해 building이라는 이름으로 shp를 불러와줍니다.
잘 불러와졌네요.
2. subset 함수 사용하여 특정 열만 남기기
building<-subset(building, select = c(A1,A2,A3,A13))
이 building은 열이 총 23개나 되는데요,
저는 A1, A2, A3, A13이라는 4개의 열만을 사용하고 싶어요.
subset이라는 기본함수를 사용하여 위와 같이 특정 열만 남겨주었습니다.
A1에서 A3까지는 연속되므로 A1:A3, A13으로 표현해도 같습니다.
원하는 열만 남았네요.
3. mutate 사용해 간단한 연산하여 열 새롭게 만들기, substr로 특정 문자 추출
library(dplyr)
building<-mutate(building, year=substr(building$A13, 1, 4))
추가로 A13에 있는 왼쪽 4자리만 추출하여 연도만 남긴 열을 새로 만들고 싶었어요.
그래서 mutate로 building 데이터에 year이라는 열을 새롭게 만들었고,
year이라는 열에는 building의 A13의 왼쪽 4자리만 추출하여 넣어주었어요.
이 때 추출은 substr 함수로 하였는데요, 코드의 1,4는 1번째자리부터 4번째자리를 추출한다는 뜻입니다.
4. 내보내기
st_write(building, "building.shp")
마지막으로 sf 패키지의 st_write 함수로 building이라는 데이터를 building.shp파일로 내보내기해 주었어요.
파일은 워킹 디렉토리에 저장이 됩니다.
문제 해결
이제 꼭 필요한 정보만 ArcMAP에서 사용할 수 있게 되었습니다.
'🖥️ IT, 컴퓨터 > 📏 R' 카테고리의 다른 글
[R] 카카오맵 API를 사용해 지오코딩하기 (주소를 경위도로 변환) (6) | 2022.08.29 |
---|---|
[R] R Studio 꾸미기 (TmThemeEditor사용하여 내가 원하는 색으로 바꾸기) (0) | 2022.08.11 |
[R] R Studio에서 R 파일의 한글이 깨질 때 : 인코딩 reopen, 노트패드 (2) | 2022.08.11 |
[R] R로 공간 네트워크 다루기 : Spatial networks in R with sf and tidygraph (0) | 2022.07.20 |
[R] 에러 해결 : 열의 개수가 열의 이름들보다 많습니다 in r (2) | 2022.07.07 |
댓글