반응형

R/R basic 36

두 개의 데이터프레임 합치기 (join 함수)

두 개 혹은 그 이상의 데이터프레임을 합칠 때 쓰는 함수는 일반적으로는 merge입니다. 그런데 merge는 다소 오래된 함수이고, 요즘은 dplyr library에 있는 join이라는 함수를 훨씬 많이 이용합니다. join 함수는 종류가 여럿인데, 많이 쓰이는 것으로는 left_join(), right_join(), inner_join(), full_join()이 있습니다. 두 개 혹은 그 이상의 데이터프레임을 합치려면 적어도 공통된 칼럼이 적어도 하나는 있어야 합니다. x와 y라는 데이터프레임을 "year"라는 공통된 칼럼으로 합치되, 두 데이터프레임에 missing value가 없는 것들만 합쳐라 이런 식으로 명령을 내리면, inner_join(x, y, by="year") 이렇게 해주면 됩니다. ..

R/R basic 2021.04.23

데이터 불러서 한 번에 통합 (plyr::ldply 함수)

바로 앞에서 do.call이라는 함수를 배웠는데요. do.call()과 rbind() 기능을 합쳐서 같은 칼럼을 갖고 있는 파일끼리 일괄적으로 통합시켜버리는 방법도 있지만, ldply라는 함수를 쓰면 더욱 쉽게 한 큐에 통합시킬 수 있습니다. 그런데 이 함수는 plyr라는 library에 있어서 우선 이 라이브러리를 가져와야 합니다. install.packages("plyr") library(plyr) 앞에서는 아래처럼 do.call()+rbind() 결합으로 통합된 데이터를 만들었는데요. myfiles = list.files(pattern="*.csv", full.names=TRUE) all1

R/R basic 2021.04.21

한 폴더에 있는 파일을 한꺼번에 불러서 통합시키기 (list.files / do.call 함수)

이번에는 R에서 한 폴더에 있는 파일을 우르르 함께 불러서 이걸 통합시켜 보는 일을 해보려고 합니다. 여기서 통합이라고 하면 각 파일들이 동일한 칼럼들을 갖고 있어서 (칼럼 이름이 모두 일치) rbind를 통해서 쉽게 통합시킬 때만을 생각해봅니다. 우선 특정 폴더에 있는 파일 이름을 R에 부르는 일이 필요할 겁니다. 이 경우에는 list.files라는 함수를 사용하는데요. 우선 setwd()를 통해 자신의 working directory를 정해주시고, list.files로서 여기에 있는 파일 이름을 모두 읽어준 다음에 list 형태로 파일 이름을 (filenames라는 이름으로 해보겠습니다) 저장합니다. 파일이 총 몇개나 있는지 알고 싶으면 length 함수를 통해서 파일 이름을 저장한 list를 읽어주..

R/R basic 2021.04.20

각 칼럼안에 있는 고유한 이름(혹은 값)은 몇 개나 있나 (n_distinct)

R로 작업을 하다보면, 각 칼럼에 고유한 값이 몇 번 나오는지 궁금할 때가 있습니다. 예를 들어 제가 들고 있는 데이터프레임 이름이 value인데, 그 데이터의 구조는 다음과 같은데요. GeoName이라는 칼럼에는 미국의 주 이름이, Description에는 각 산업 이름이 들어가 있습니다. 연도별 데이터를 모으다보니 주 이름이나 산업 이름이 겹쳐서 여러 번 나오게 됩니다. 그럼 여기서 (반복되는 이름 빼고 고유한 이름의) 미국 주는 몇 개나 포함된 걸까? 만약 미국 모든 주가 포함된 거라면 51개의 주가 다 포함된 걸까? (역시 반복되는 이름 빼고) 산업은 몇 개나 있는 걸까? 등이 궁금할 겁니다. 이 때는 쓰는 명령어가 dplyr library에 있는 summarize() 함수에 있는 n_distin..

R/R basic 2021.04.14

도대체 리스트, 벡터, 매트릭스, 데이터프레임이란 무엇인가

이건 R뿐 아니라 다른 데이터 프로그램 돌릴 때도 마찬가지인데 list, vector, matrix, dataframe (이건 R에만 해당되는 얘기)가 나오면서 개념이 헷갈릴 때가 많습니다. 다들 비슷하게 보입니다. 저는 리스트는 벡터랑 같은 말인줄 알았고 매트릭스는 데이터프레임 아냐?라고 생각했는데 완전 잘못된 생각이죠. 백터는 기본적으로 한 줄 짜리이면서 같은 속성 (즉 숫자면 숫자 문자면 문자)을 갖고 있어야 하는 반면 리스트는 그런 거 관계 없이 일단 속성에 상관없이 일단 다 꾸역꾸역 다 넣어줍니다. 리스트 안에 숫자로 된 벡터를 넣어도 되고 문자도 되니 벡터를 넣어도 되고 길이가 다 달라도 되고 자기 마음대로 하면 됩니다. 매트릭스와 데이터프레임은 그냥 칼럼이 여러개 있는 거 아냐라고 생각했지만..

R/R basic 2021.04.10

R에 지금 열려 있는 데이터 지우기

R로 작업을 하다보면 필요없이 많은 데이터 (그게 데이터프레임 형태든 list이든)가 있는 경우가 있습니다. R 환경 창을 보면 필요없는 데이터들이 우르르 떠 있는 경우가 있죠. 메모리 용량 너무 차지 하니까 필요없는 데이터 하나 R에서 없애자 (당연히 영구적으로 없애는 건 아닙니다) 하면 그냥 rm() 명령어를 쓰면 됩니다. 예를 들어, 지금 창에 데이터프레임이 여러개 우후죽순으로 있는데 그 중에서 comp라는 데이터프레임은 없애자 하면 그냥 rm(comp) 하면 됩니다. 없어진 거 보이죠? 만약에 싹 다 working space에서 데이터를 없애고 싶다고 하면 rm(list=ls()) 이 명령어를 쓰면 창이 싹 깨끗해집니다. 만약에 두 개의 데이터프레임 (예를 들어 데이터프레임 이름이 korea, j..

R/R basic 2021.04.07

내 변수의 속성은 무엇인가 str(), is.factor(), is.numeric()

R의 데이터를 보다보면 변수 속성이 제각각일 때가 많습니다. 어떤 건 숫자이고 (num), 어떤 건 팩터(factor)이고, 어떤 변수는 문자(character)이고.. 이럴 때 각 칼럼의 데이터 속성이 무엇인지를 볼 때 가장 흔하게 쓰는 명령어가 str()입니다. 예를 들어 R에서 데이터프레임 이름이 df이고 이 데이터프레임의 모든 칼럼 속성이 무엇인지 알고 싶다고 하면 그냥 str(df)하면 .. 아래와 같이 쭉 뜹니다... 근데 모든 칼럼 속성이 무엇인지 다 알 필요 없고, 각 칼럼의 속성이 factor인지 아닌지 그것만 알고 싶다고 하면 is.factor()라는 함수를 쓰는데 이 때는 어떤 칼럼을 테스트할지 적어줘야 합니다. 예를 들어 df라는 데이터프레임 중에 X2015라는 칼럼이 팩터인지 여부..

R/R basic 2021.04.06
반응형