본문 바로가기
반응형

R37

[R.아르] 객체 지우기 rm() / 특정 문자가 포함된 행 추출하기 grep() ls()는 현재 사용하고 있는 객체Object 들의 리스트를 보여준다. (ls: list objects) 만일 이 중에 필요 없는 객체를 지우고 싶다면 rm() 명령을 사용하면 된다. (rm: remove) 여러 개의 객체를 지우려면 콤마(,)로 구분하여 입력한다. 삭제할 개체가 너무 많다면 그 목록을 하나의 벡터로 구성하여 rm()에 넣을 수도 있다. 이럴 때는 [list=] 옵션을 사용한다. 이름에 temp가 들어간 객체들만 지우려면 어떻게 해야 할까? 일단 temp가 들어간 객체들의 이름으로 만들어진 벡터가 있어야 한다. grep() 은 어떤 벡터에서 주어진 문자열을 포함하는 요소의 번호를 반환한다. ls() 벡터의 2, 3, 4번 요소가 temp를 포함하고 있다는 얘기다. 그러므로 ls()벡터에서.. 2016. 9. 30.
[R.아르] R의 작업 디렉토리Working Directory 변경하기 getwd() 를 이용하면 현재의 작업 디렉토리를 알 수 있고 setwd() 를 이용하면 작업 디렉토리를 변경할 수 있다. 문제는 R을 종료하고 나면 이전에 설정해 둔 작업 디렉토리가 초기화된다는 것이다. R은 미리 설정된 기본 작업 디렉토리의 .RData 를 불러오게 되어 있으므로 이전에 setwd()를 이용해 변경한 디렉토리에서 저장한 .RData는 자동으로 불러오지 않는다. 아예 R의 기본 디렉토리를 변경하려면 어떻게 해야 할까? R은 처음에 Rprofile.site 라는 파일에 저장된 세팅값을 불러와 환경을 구성한다 그러니 setdw() 명령을 Rprofile.site에 넣어 두면 R이 시작될 때마다 해당 디렉토리를 기본으로 불러 올 것이다. Rprofile.site 파일은 R이 설치된 디렉토리 .. 2016. 9. 28.
[R.아르] 찾아바꾸기(2) lapply() / if() apply() 함수는 연산을 행 또는 열 단위로 적용해 주는 함수다. 예를 들어 다음과 같은 x에서 우리는 1열의 합을 구할 수 있을 것이고 마찬가지로 2행의 합도 구할 수 있을 것이다. 각 행, 혹은 각 열의 합을 구하려면 어떻게 할까? 이럴 때 apply() 함수를 사용한다. apply(데이터, 행 또는 열, 적용할 함수) 와 같이 적는다. apply() 중간의 '1' 은 행 방향으로 함수를 적용하라는 의미이다. 2는 열 방향으로 함수를 적용한다. 이전에 2016/09/26 - [R] - [R.아르] 찾아바꾸기 gsub() 에서 본 대로 gsub()은 한 번에 한 벡터에만 적용 가능한 한계가 있으므로 gsub()과 apply()를 조합하면 전체 데이터프레임에서 찾아바꾸기를 실행할 수 있다고 추론할 수.. 2016. 9. 26.
[R.아르] 찾아바꾸기 gsub() 엑셀 등 오피스 프로그램에서 Ctrl + H 를 누르면 찾아 바꾸기 기능을 사용할 수 있다. R에서는 gsub() 함수가 찾아바꾸기 기능을 담당한다. (gsub의 sub는 substitute를 의미하며, g는 전역global을 의미한다고 한다.) gsub(찾을 것, 바꿀 것, 열 지정)과 같이 사용하면 된다. 다음과 같은 x가 있다고 하자. 소문자 a를 대문자 A로 바꾸려면 gsub("a", "A", x$string) 과 같이 적어주면 되겠다. 사과를 오렌지로 바꿀 수도 있다. gsub()은 2016/09/06 - [R] - [R.아르] 특정 조건에 맞는 글자(이메일 주소)만 추출하기 에서 등장했던 정규표현식을 지원하므로 이를 응용할 수 있다. '처음'을 의미하는 문자는 ^ '마지막'을 의미하는 문자는 .. 2016. 9. 26.
[R.아르] 원하는 순서로 데이터 정렬하기 order() 2016/09/23 - [R] - [R. 아르] 리스트에 없는 항목만 추출하기 (차집합, setdiff()) 에서 잠시 sort() 함수가 나온 적이 있다. 예를 들어 다음과 같은 z를 순서대로 정렬해야 한다면 sort()를 사용하면 간단하다. 만일 내림차순으로 정렬하고 싶다면 [decreasing=] 옵션을 사용하자. 하지만 다음과 같은 데이터프레임은 sort()로 정렬하기가 난감하다. y$var 를 sort()로 정렬할 수는 있겠지만, y전체가 정렬되지는 않는다. 이럴 때는 order()를 사용한다. order()는 각 요소의 상대적인 순서를 반환한다. order(y$var)를 보자. (1)100 - (6)150 - (2)250 - (9)260 ... 과 같이 값을 순서대로 정렬한 후, 그 값이 원 .. 2016. 9. 26.
[R.아르] R에서 피벗테이블 사용하기 dcast() 피벗테이블의 용도야 다양하겠지만 특히 두 가지 경우에 많이 쓰이는 것 같다. 1) 항목별 합산이 필요한데 countif와 sumif를 사용하기는 귀찮을 때 2) 한 항목은 행, 한 항목은 열로 삼아 펼쳐 보고 싶을 때 두 번째 것부터 먼저 알아보자. 먼저 x를 마련하고 reshape2 라이브러리를 불러온다. 피벗테이블 기능을 하는 함수는 dcast()다. dcast(원 데이터, 행이 될 항목 ~ 열이 될 항목, 값으로 사용할 항목, 결과 형태) 와 같이 적어준다. 우리는 날짜를 행으로 삼고 상품을 열로 삼아 펼칠 것이므로 date ~ product 와 같이 써 주면 되겠다. 그리고 sales 열을 값으로 사용할 것이므로 value.var="sales" 로 입력한다. 원하는 결과를 얻었다. 잠깐, 총합이 .. 2016. 9. 23.
[R. 아르] 리스트에 없는 항목만 추출하기 (차집합, setdiff()) 지난 번 2016/09/08 - [R] - [R.아르] R에서 엑셀의 vlookup() 기능 사용하기 에서 본 merge()는 일종의 '교집합'을 구하는 함수로 생각해도 되겠다. 이번엔 차집합을 구하는 함수를 알아보자. 예를들어 다음과 같은 x, y에서 x에만 있고 y에는 없는 것을 고르려면 setdiff() 함수를 사용하면 된다. 반대로 y에만 있고 x에는 없는 것을 고르려면 순서를 반대로 사용한다. 내친 김에 합집합, 교집합, 부분집합도 알아보자. 합집합은 union() 함수를 사용한다. 사용하는 순서에 따라 원소의 배열이 다르며 자동으로 정렬되지는 않는다. 정렬하려면 sort()를 사용하자. 교집합은 intersect()를 사용한다. 한 집합이 다른 집합의 부분집합인지도 알 수 있다. 예를들어 다음.. 2016. 9. 23.
[R. 아르] 내용 합치기 paste() 엑셀에서는 셀의 내용을 합칠때 다음과 같이 &를 사용한다. 중간에 무언가 넣고 싶다면 큰따옴표로 R에서는 paste() 함수를 사용한다. 다음과 같은 x의 두 열을 합치려면 위와 같이 paste() 를 사용하면 된다. 붙일 때 중간에 무언가 넣고 싶다면 [sep =] 옵션을 사용한다. 중간에 공간도 없이 완전히 붙이고 싶다면 [sep=] 옵션에 ""를 사용한다. 한 벡터 내의 내용을 합치고 싶을 때는 어떻게 할까? 예를 들어 다음과 같은 x$x1을 z처럼 합치려면? 이전의 방법으로는 되지 않는다. 이럴 땐 [collapse =] 옵션을 사용한다. collapse 는 한 벡터 내의 내용도 하나로 붙여준다. 역시 다른 것을 지정하면 사이에 넣어 준다. 2016. 9. 22.
[R.아르] 중복된 행 삭제하기 unique() / duplicated() R에서 중복된 행을 삭제하려면 unique()를 사용하면 된다. 다음과 같은 x에서 unique()를 실행시키면 중복된 행들이 사라지는 것을 알 수 있다. 중복된 행이 몇 개나 되는지 숫자가 알고 싶을 때는? 지난 번에 본 nrow를 쓰면 되겠다. 여러 개의 열이 있을 경우에는 행의 모든 값이 완전히 동일할 때만 중복으로 간주한다. 예를들어 다음과 같은 x에서 unique()를 실행시키면 4행과 5행은 서로 중복이 아니므로 제거되지 않는다. 간혹 중복된 행들을 직접 눈으로 확인하고 싶을 때가 있다. 이럴 땐 duplicated() 함수를 사용한다. 다음과 같은 x에서 duplicated()를 사용하면 중복된 행을 TRUE로, 아닌 행을 FALSE로 반환해 준다. 진리값이 보기 어렵다면 which()안에 .. 2016. 9. 12.
[R.아르] 중복된 값의 개수 세기(엑셀의 countif) 다음과 같은 x가 있다고 하자. a는 총 몇 번 나왔을까? 지난 번에 본 length(which())를 쓰면 되겠다. (2016/09/05 - [R] - [R.아르] 특정 조건을 만족하는 행의 개수 구하기) 3번 나왔다고 한다. 그렇다면 b는? c는? d는? e는? 매번 이렇게 확인하기는 힘든 일이다. 이럴 때 엑셀에서는 countif()를 쓴다. 그리고 R에서는 table()을 사용한다. table은 결과를 표로 정리해 주는 함수이며, 이렇게 열 하나를 지정할 경우 해당 열의 데이터가 몇 번 중복으로 나왔는지 알려준다. 엑셀에서 countif() 함수를 쓰는 것과 비슷하다. 데이터 프레임으로 보는 것이 편하다면 아래와 같이 데이터프레임으로 바꾸어 주자. 2016. 9. 9.
반응형