본문 바로가기
반응형

R37

[R.아르] R에서 엑셀의 vlookup() 기능 사용하기 vlookup이라 함은 자고로 레퍼런스에서 맞는 자료를 찾아 그 값을 반환해 주는 것이다. R에도 엑셀의 vlookup() 같은 함수가 있다. 다음과 같은 두 개의 데이터프레임이 있다고 하자. 우리는 y를 레퍼런스로 삼아 x의 각 name에 해당하는 값을 찾아 줄 것이다. 해당 역할을 하는 함수는 merge()로, merge(자료1, 자료2, 기준) 과 같이 쓴다. 쨘! 간단하다. vlookup()에는 안에 자료를 지정하는 순서가 중요하지만 merge()에는 순서가 중요하지 않다. x와 y의 순서를 바꾸어도 결과는 마찬가지다. R은 두 개의 자료를 비교하고, 값이 있는 경우 값을 모두 반환하고 값이 없는 경우에는 결과를 생략한다. 예를들어 위와 같은 x, y에 merge()를 사용하면 이와 같은 결과가 .. 2016. 9. 8.
[R.아르] 특정 조건에 맞는 글자(이메일 주소)만 추출하기 다음과 같은 x가 있다고 하자. 우리는 여기에서 이메일 주소만 예쁘게 뽑아서 다음과 같이 만들 것이다. 그러기 위해서는 두 가지 함수를 써야 하는데 첫 번째는 '일치하는 문자열만 뽑아줘' regmatches() 이고, 두 번째는 그 일치하는 문자열의 형식을 지정하는 regexpr() 이다. 조합하면 regmatches(regexpr()) 와 같이 될 테니, regexpr()부터 먼저 보자. 사실 regexpr()은 R뿐 아니라 여기저기서 쓰는 유명한 녀석인 '정규표현식' 이라는 녀석을 다루는 함수다. 정규표현식을 다 다루기에는 분량이 너무 방대하고, 일단 팁 하나. http://regexr.com/ 위 사이트에 가면 정규표현식을 공부하고 직접 실습해볼 수 있다. 이제 이메일 주소에 대한 정규표현식을 만들.. 2016. 9. 6.
[R.아르] 특정 조건을 만족하는 행의 개수 구하기 아래와 같은 x에서 var의 값이 60을 넘는 행의 개수는 몇 개일까? 2016/09/05 - [R] - [R.아르] 특정 조건을 만족하는 행만 추출하기 에서 논의한 대로 다음과 같이 뽑으면 될 것이다. 총 5개 행이다. 데이터가 많아지면 직접 셀 수는 없고, 이럴 때 행의 개수를 세어 주는 함수는 nrow() 쨘! 근데 추출이 조금 번거롭다. 조건을 만족하는 행의 개수만 한 번에 셀 수도 있지 않을까? 물론이다. 그냥 y대신 x[x$var>=60,] 를 쓰면 된다. 하지만 개인적으로는 아래의 코드가 훨씬 직관적이고 기억하기 쉽다고 생각하는 바, 오? 왠지 x$var >= 60 에 해당하는 것들의 길이(?) 라고 자연스럽게 읽힌다. which()는 괄호 안의 조건에 해당하는 데이터가 어디어디에 있는지 그.. 2016. 9. 5.
[R.아르] 특정 조건을 만족하는 행만 추출하기 2016/08/30 - [R] - [R.아르] R 행,열 삭제 의 연장선상에서, 꼭 '몇 번째' 행만 뽑을 수 있는 것은 아니다. 특정 조건을 만족하는 행도 추출할 수 있다. 다음과 같은 x가 있다고 하자. 여기서 var 가 70 이상인 행만 뽑아내려면 다음과 같이 하면 된다. 맨 끝의 쉼표를 잊지 말자. 해당 조건을 만족하는 '행' 임을 알려주는 부분이다. 기본적으로 행과 열의 정의를 통해 위와 같이 추출하는 방법도 좋지만, 어쩌면 다음에 소개하는 subset()이 좀 더 마음에 들지도 모르겠다. subset(데이터프레임, 조건) 은 조금 더 간단하고 직관적인 추출을 지원한다. 사잇값을 뽑으려면 and에 해당하는 '&' 기호를 사용하면 된다. 날짜도 마찬가지로 조건을 걸어 추출할 수 있다. 다음과 같은.. 2016. 9. 5.
[R.아르] 글자 수 세기 nchar() 가끔 각 데이터들의 글자 수가 궁금할 때가 있다. 데이터를 예쁘게 잘 다듬은 후, 같은 자리수로 맞춰졌는지 확인할 때라거나. 글자가 조금 들어가 있는 mtcars 자료를 사용하자. mtcars의 head 부분만 x로 가져왔다. 행 이름(rownames(x))의 길이가 각각 얼마나 되는지 알아보자. 이럴 때 nchar()를 사용한다. "Mazda RX4" 는 9글자라는 이야기다. "Mazda RX4 Wag" 는 13글자고. 공백을 포함하여 세는 것을 알 수 있다. 꼭 문자만 세어 주는 것은 아니다. "."을 포함하여 세고, 소수점 이하 마지막 0은 세지 않는 것을 볼 수 있다:) 2016. 9. 2.
[R.아르] R 행,열 삭제 R에서 쓰이는 데이터프레임은 행과 열을 갖고 있다.[2, 1] 은 2행 1열,[1, 3] 은 1행 3열을 의미한다. 같은 원리로, 쉼표의 위치에 따라[2,] 은 '2행'을 의미하고[,3] 은 '3열'을 의미한다 행과 열이 많이 필요할 것 같으니, R에 기본 저장 되어 있는 'iris' 데이터를 보자 150행짜리라, 첫 몇 행만 보려고 head()에 넣었다. 여기서 1행만 뽑고 싶다면 이렇게 1에서 10행까지만 뽑고 싶다면 이렇게 1에서 3열까지만 뽑고 싶다면 이렇게 하면 된다. 3열까지 뽑을 경우 행은 150 행일 것이므로 head()로 조금만 보았다:) 이제 x에서 1행을 삭제해 보자. 삭제는 (-) 기호를 쓰면 된다. 마찬가지로 2, 4, 6 행을 삭제하려면 삭제시에는 행이름이 아니라 행의 순서로 판.. 2016. 8. 30.
[R.아르] R 행,열 추가 요런 x랑 요런 y가 있다고 할 때 x 오른쪽에 y를 열로 추가하려면 cbindcbind의 c는 열(column)을 의미한다. 순서를 다르게 하면 다르게 붙는다 열의 이름을 지정하고 싶을 경우 cbind()에서 선언해 준다. 이번엔 행을 추가해 보자.요런 x와 요런 y가 있다고 할 때 x아래에 y를 행으로 붙이려면 rbind()rbind의 r은 행(row)을 의미한다. 맨 끝이 아니라 중간에 넣고 싶다면?다음과 같이 (z의 1-7행, a, z의 8-10행)으로 rbind()를 사용하면 a가 z의 7행과 8행 사이에 들어간다. z[c(1:7),] 은 'z의 1행부터 7행까지'라는 의미이다.(2016/08/30 - [R] - [R.아르] R 행,열 삭제 참고) 바뀐 z를 보면 원래 8, 9, 10 의 행번호.. 2016. 8. 30.
반응형