본문 바로가기
반응형

분류 전체보기217

[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.
[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.
[엑셀] 특정 조건에 맞는 셀들의 합 구하기 (sumif, 배열수식) 다음과 같은 자료에서 분류가 A인 것들의 합만 구해야 한다면 sumif()를 사용하면 된다. sumif()는 sumif(조건을 판단할 셀, 조건, 합산할 셀)과 같이 지정한다. 또는, 아래와 같은 '배열수식'을 사용해도 된다. 뒤에서 보겠지만, 배열수식은 특정 조건의 합 외에도 다양한 값을 반환하므로 알아두면 유용하게 사용할 수 있다. 배열수식은 특이하게, 입력 후 그냥 Enter가 아니라 Ctrl + Shift + Enter 를 눌러야 제대로 입력된다. 일단 안에 들어 있는 IF(B:B="A",C:C) 부분은 B열의 값이 "A"인 행들의 C열 데이터를 가지고 별도의 집합(혹은 배열, 혹은 벡터)을 만들어라 라는 의미다. 엑셀에서 흔히 쓰던 if(조건, 맞으면, 틀리면) 과는 조금 용법이 다르다. 그래서.. 2016. 9. 5.
[R.아르] 글자 수 세기 nchar() 가끔 각 데이터들의 글자 수가 궁금할 때가 있다. 데이터를 예쁘게 잘 다듬은 후, 같은 자리수로 맞춰졌는지 확인할 때라거나. 글자가 조금 들어가 있는 mtcars 자료를 사용하자. mtcars의 head 부분만 x로 가져왔다. 행 이름(rownames(x))의 길이가 각각 얼마나 되는지 알아보자. 이럴 때 nchar()를 사용한다. "Mazda RX4" 는 9글자라는 이야기다. "Mazda RX4 Wag" 는 13글자고. 공백을 포함하여 세는 것을 알 수 있다. 꼭 문자만 세어 주는 것은 아니다. "."을 포함하여 세고, 소수점 이하 마지막 0은 세지 않는 것을 볼 수 있다:) 2016. 9. 2.
[인쇄] A4 B4 각 용지 크기 정리 용지 규격은 '용지를 반으로 접었을 때의 가로 세로 비율이 원래 용지와 같아야 한다'는 원칙에 따라 계산되었다. 예를들어 세로:가로의 비율이 3:2인 용지는 반으로 접을 경우 세로:가로의 비율이 4:3이 되어 원래 용지와 모양이 달라진다. 원래 용지와 반 접은 용지의 비율이 같도록 다음과 같이 계산하자. 원래 용지의 가로를 a, 세로를 b라 하면 반 접은 용지의 가로는 b/2, 세로는 a가 되며 이 비율이 같아야 하므로 (a, b는 모두 양수) 가로와 세로의 비율이 √2 배(약 1.4배)인 용지를 만들면 된다. A시리즈 용지는 A0에서 시작하며 A0는 가로와 세로의 비율이 √2 이고 넓이가 약 1m^2 인 용지이다. A0 = 841 x 1189 (mm) A시리즈는 이 A0를 반씩 접으며 만들어진다. 용지.. 2016. 9. 2.
[엑셀] 일요일만 빨간 색으로 바꾸기 가끔 특정 요일만 색을 바꾸어야 할 경우가 있다.그럴 땐 '조건부 서식'과 weekday() 함수를 쓴다. 1. 날짜 기입 (Alt + E + I + S 로 채워도 된다)2. 범위 선택3. [조건부 서식] - [새 규칙] - [수식을 사용하여 서식을 지정할 셀 결정]=weekday(첫셀)=1 입력서식에서 글자색이나 채우기, 테두리 등 변경4. 완성 weekday() 의 괄호 안에는 날짜가 시작되는 첫 셀의 열과 행을 넣어 주면 된다. 다만 해당 셀을 클릭으로 지정하면 자동으로 ($A$1) 과 같이 열, 행이 고정되는데 $A는 놔두어도 좋지만 $1은 반드시 1로 고정을 풀어 주어야 한다. A1, A2, A3, A4, A5... 등 아래로 내려감에 따라 행 번호가 변경되어야 하기 때문 위 그림에서는 D4부터.. 2016. 9. 1.
반응형