[R강의] 175. 데이터프레임에서 특정 값이 포함된 행 제거하기
아래와 같은 데이터프레임이 있다고 합시다. id=c('A','B','C','D','E') height=c(156,176,167,189,196) weight=c(65,77,84,67,75) df=data.frame(id,height,weight) > df id height weight 1 A 156 65 2 B 176 77 3 C 167 84 4 D 189 67 5 E 196 75 id가 C인 행을 제거하고 싶다고 합시다. id가 C인 행을 제거하는 방법은 아래와 같습니다. df=df[ !(df['id']=='C'),] !(df['id']=='C')는 id가 C가 아닌 경우를 TRUE, id가 C인 경우를 FALSE로 반환하는 벡터입니다. 이 벡터를 행 인덱스 자리에 입력하면 TRUE인 경우인 C가 아닌 ..
2023. 8. 29.
[R강의] 173. 데이터프레임 인덱싱에서 df[3, ] 와 df['3', ] 의 차이
아래 두 인덱싱을 봅시다. df[3, ] df['3', ] 세번째 행을 인덱싱한다는 의미로 두 코드가 같아 보이지만 전혀 다른 코드입니다. df[3, ] 는 세번째 행을 인덱싱한다는 의미이고, df['3', ] 는 이름이 3인 행을 인덱싱한다는 의미입니다. 일반적으로는 세번쨰 행의 이름이 3이기 때문에 결과가 같지만, 행 이름이 달라지는 경우에는 위 두 코드를 구분해주어야 합니다. 아래와 같은 데이터프레임이 있다고 합시다. id=c('A','B','C','D','E') height=c(156,176,167,189,196) weight=c(65,77,84,67,75) df=data.frame(id,height,weight) 행 이름을 아래와 같이 바꾸겠습니다. rownames(df)=c(3,2,1,4,5)..
2023. 8. 29.
[R강의] 172. 결측치를 평균값으로 대체하기 (ifelse)
벡터나 데이터프레임에 있는 결측치를 평균값으로 대체하는 방법을 알아봅시다. ifelse 문이 사용되므로 ifelse문을 먼저 배워보겠습니다. 1. ifelse 문 ifelse 문은 아래와 같이 사용합니다. ifelse(테스트,참일경우반환,거짓일경우반환) 예를 들면 아래와 같습니다. > ifelse(1==2,1,0) [1] 0 1==2는 거짓이므로 0을 반환합니다. 테스트 자리에 벡터를 넣으면 각 원소별로 테스트가 수행되어 값이 반환됩니다. > v=c(1,2,3,4,5) > ifelse(v==1,1,0) [1] 1 0 0 0 0 v의 각 원소를 1과 비교하여 같으면 1, 다르면 0이 출력됩니다. 2. 벡터의 결측치를 평균값으로 대체 아래와 같은 벡터가 있다고 합시다. v1=c(1,2,NA,4,NA) 벡터의..
2023. 8. 29.
[R강의] 170. 산점도 점에 좌표와 점이름 출력하는 방법 (bquote)
먼저 산점도를 하나 그려봅시다. x=c(1,2,4,4,1) y=c(1,3,6,2,1) plot(x,y,xlim=c(0,5),ylim=c(0,6)) 각 점의 좌표를 먼저 화면에 출력해봅시다. x=c(1,2,4,4,1) y=c(1,3,6,2,1) plot(x,y,xlim=c(0,5),ylim=c(0,6)) for (i in 1:length(x)){ text(x[i],y[i],labels=paste0('(',x[i],',',y[i],')'),pos=1,cex=0.8) } 각 점의 이름을 순서 대로 P1부터 이름을 붙이겠습니다. $P_1(1,1)$ 과 같은 형태로 출력해봅시다. bquote 에서 ~은 한칸을 띄우고 연결하는 것이고, *은 공백 없이 연결한다는 뜻입니다. 변수를 입력할 때는 .(변수)형태로 입력하..
2023. 8. 29.
[R강의] 169. 그래프에 for문을 이용하여 아래첨자를 변수로 입력하기 (bquote)
아래와 같은 그래프가 있다고 합시다. x=c(1,2,4,4) y=c(1,3,6,2) plot(x,y,xlim=c(0,5),ylim=c(0,6)) 각 점을 $P_{1}$~$P_{4}$라고 두고, 점 아래에 점 이름을 출력하고 싶은 상황입니다. for문을 사용할 것인데요. 이 경우에는 expression 함수가 아닌 bquote 함수를 사용해야 합니다. 아래와 같이 사용합니다. [ ] 는 아래첨자라는 의미이고, .(i)는 i를 변수로 입력받는다는 의미입니다. x=c(1,2,4,4) y=c(1,3,6,2) plot(x,y,xlim=c(0,5),ylim=c(0,6)) for (i in 1:length(x)){ text(x[i],y[i],labels=bquote(P[.(i)]),pos=1,cex=0.8) }
2023. 8. 29.
[R강의] 168. 그래프에 아래첨자,위첨자 넣는 방법 (exprssion)
아래와 같이 이차함수의 그래프를 하나 그려줍니다. x=seq(-4,4,0.01) y=x^2 plot(x,y,type='l') 그래프 제목을 $y=x^2$으로 하고 싶은 상황입니다. 위첨자를 넣어야 합니다. 위첨자는 아래와 같이 넣어줄 수 있습니다. x=seq(-4,4,0.01) y=x^2 plot(x,y,type='l',main=expression(y==x^2)) 아래첨자는 아래와 같이 넣습니다. x=seq(-4,4,0.01) y=x^2 plot(x,y,type='l',main=expression(y==x[2]))
2023. 8. 29.
[R강의] 165. 데이터프레임의 특정 열을 기준으로 결측치를 제거하는 방법
데이터프레임을 하나 만들어봅시다. v1=c(1,2,NA,4,NA) v2=c(10,20,NA,NA,50) df=data.frame(v1,v2) > df v1 v2 1 1 10 2 2 20 3 NA NA 4 4 NA 5 NA 50 결측치를 제거할 건데요. NA가 포함된 모든 행을 제거하는 방법은 간단합니다. na.omit 함수를 적용하면 됩니다. > na.omit(df) v1 v2 1 1 10 2 2 20 오늘 우리가 하고 싶은 것은 이게 아닙니다. 특정 열을 기준으로 결측치를 제거하고 싶습니다. 예를 들어 1열을 기준으로 결측치를 제거하면 3,5행만 제거되는 것입니다. 1열을 기준으로 결측치를 제거하는 방법을 알아봅시다. 먼저 1열의 원소들이 NA인지 여부를 논리값으로 출력해봅시다. > is.na(df$v..
2023. 8. 29.
[R강의] 164. 데이터프레임의 결측치 위치를 알려주는 함수 만들어보기
아래와 같은 데이터프레임이 있다고 합시다. v1=c(NA,2,3,4,NA) v2=c(10,20,NA,NA,50) df=data.frame(v1,v2) > df v1 v2 1 NA 10 2 2 20 3 3 NA 4 4 NA 5 NA 50 긱 원소의 결측치 여부를 확인하는 것은 is.na 로 가능합니다. > is.na(df) v1 v2 [1,] TRUE FALSE [2,] FALSE FALSE [3,] FALSE TRUE [4,] FALSE TRUE [5,] TRUE FALSE 오늘 하고 싶은 것은 결측치의 위치를 출력해주는 함수를 만드는 것입니다. 위 데이터 프레임을 예로 들면 아래와 같이 출력되는 것입니다. 1,1 3,2 4,2 5,1 함수를 만들기 전에 먼저 데이터프레임의 NA 위치를 출력해주는 코드를..
2023. 8. 29.
[R강의] 162. 데이터프레임 특정 열을 기준으로 오름차순, 내림차순 정렬하기
데이터프레임을 오름차순 또는 내림차순으로 정렬할 때는 order 라는 함수가 사용됩니다. 먼저 order 함수를 이해해봅시다. 1. order 함수와 벡터의 오름차순,내림차순 정렬 아래와 같이 벡터를 두개 정의합시다. v1=c(1,2,1,3,2) v2=c(20,10,10,10,30) v1에 order 함수를 적용해봅시다. > order(v1) [1] 1 3 2 5 4 v1을 오름차순 정렬 했을 때, 각 원소가 몇번 째 오게 되는지를 반환합니다. 만약 order(v1)의 결과를 아래와 같이 인덱스로 사용한다면, 오름차순으로 정렬하는 효과를 얻습니다. > v1[order(v1)] [1] 1 1 2 2 3 내림차순 정렬은 아래와 같이 하면 됩니다. > v1[order(v1,decreasing=TRUE)] [1..
2023. 8. 29.
[R강의] 161. 데이터프레임 행과 열을 제거하는 방법
데이터프레임을 하나 정의합시다. v1=c(1,2,1,3,2) v2=c(20,10,10,10,30) v3=c('a','b','c','d','e') df=data.frame(v1,v2,v3) > df v1 v2 v3 1 1 20 a 2 2 10 b 3 1 10 c 4 3 10 d 5 2 30 e 1. 열 제거하는 방법 첫번째 열을 제거하는 방법은 아래와 같습니다. 제거하고 싶은 열의 번호에 마이너스를 붙이고 인덱싱하면 됩니다. > df[-1] v2 v3 1 20 a 2 10 b 3 10 c 4 10 d 5 30 e 아래와 같이 콤마를 넣어도 됩니다. > df[,-1] v2 v3 1 20 a 2 10 b 3 10 c 4 10 d 5 30 e 첫번째 열과 세번째 열을 제거하는 방법은 아래와 같습니다. > df[..
2023. 4. 26.
[R강의] 160. 데이터프레임 행의 순서를 바꾸는 방법과 원리
데이터 프레임을 하나 정의합시다. v1=c(1,2,3,4,5) v2=c('a','b','c','d','e') df=data.frame(v1,v2) > df v1 v2 1 1 a 2 2 b 3 3 c 4 4 d 5 5 e 순서를 바꿀 때는 데이터프레임의 인덱싱을 사용합니다. 인덱싱의 원리를 이해하면 순서를 바꾸는 원리도 이해할 수 있습니다. 데이터프레임 df 의 첫번째와 두번째 행만 가져와 봅시다. > df[c(1,2),] v1 v2 1 1 a 2 2 b 이번에는 순서를 바꿔서 두번째 행과 첫번째 행을 가져와봅시다. > df[c(2,1),] v1 v2 2 2 b 1 1 a 인덱싱 c(2,1) 의 의미는 두번째 행과 첫번째 행을 순서대로 가져오라는 의미입니다. 이 원리를 이용하면 데이터프레임 행의 순서를 바..
2023. 4. 26.
[R강의] 158. 벡터 원소의 순서를 바꾸는 방법과 원리
아래와 같은 벡터가 있다고 합시다. v=c('A','B','C') 순서를 B,A,C 로 바꾸고 싶다면 아래와 같이 하면 됩니다. > v[c(2,1,3)] [1] "B" "A" "C" 인덱싱을 이용한 것인데요. c(2,1,3) 을 인덱스로 입력하면 두번째, 첫번째,세번째 순서로 원소를 가져와 벡터 형태로 나열하게 됩니다. 아래와 같이 입력하면 어떻게 출력될까요? v[c(2,1,2)] B,A,B 가 출력됩니다. 인덱스를 중복으로 입력해도 된다는 것을 알 수 있습니다.
2023. 4. 26.
[R강의] 155. 데이터프레임의 여러 열을 합쳐서 변수와 값으로 만들기 (melt)
데이터프레임의 여러 열을 합쳐서 변수와 값으로 만드는 방법을 알아봅시다. 말이 좀 어렵죠? 그림으로도 준비했습니다. 왼쪽 데이터는 다섯 학생의 성별과 시험성적입니다. 네 과목의 시험성적인데요. 오른쪽 처럼 과목이라는 열과 점수라는 열로 바꿔보겠습니다. 오른쪽 처럼 바꾸면 데이터를 다루기가 편해집니다. 먼저 패키지를 하나 설치하고 불러옵시다. reshape2 라는 패키지입니다. 이 패키지 안에 있는 melt 함수를 사용할 겁니다. #패키지 설치 install.packages("reshape2") #패키지 불러오기 library(reshape2) 아래와 같이 데이터를 입력합시다. ID=c(1,2,3,4,5) SEX=c('M','M','F','F','F') ENG=c(65,55,45,95,78) MATH=c(..
2023. 4. 15.
[R강의] 152. 벡터의 그룹별로 함수 적용하기 (tapply)
아래와 같은 벡터가 있다고 합시다. v=c(1,2,3,4,5,6,7,8,9) 각 값들은 아래와 같은 그룹에 속한다고 합시다. 그룹은 factor로 정의합니다. f=factor(c('A','A','B','A','A','B','A','A','B')) tapply 함수를 이용하면 그룹별로 함수를 적용할 수 있습니다. 그룹 별로 평균을 구해봅시다. > tapply(v,f,mean) A B 4.5 6.0
2023. 4. 5.
[R강의] 151. 리스트의 각 원소에 함수 적용하기 (sapply, lapply)
리스트의 각 원소에 함수를 적용하는 방법은 두가지가 있습니다. sapply 와 lapply 함수입니다. sapply 함수는 결과를 벡터나 행렬 형태로 출력하고 lapply 함수는 결과를 리스트 형태로 출력합니다. 예제를 통해서 이해해봅시다. 먼저 리스트를 하나 정의합시다. Math=c(94,82,45,55,67) English=c(88,86,56,90,50) Science=c(87,76,65,43,55) li=list(Math,English,Science) > li [[1]] [1] 94 82 45 55 67 [[2]] [1] 88 86 56 90 50 [[3]] [1] 87 76 65 43 55 1. sapply 함수 sapply 함수는 아래와 같은 형식으로 사용합니다. sapply(리스트,함수) 리스..
2023. 4. 4.
[R강의] 150. 데이터프레임의 열 방향으로 함수 적용하기 (apply, sapply, lapply)
데이터프레임의 열 방향으로 함수를 적용하는 방법은 무려 세가지가 있습니다. apply,sapply,lapply 입니다. 이들의 차이점은 결과를 출력하는 방식입니다. apply와 sapply 는 벡터나 행렬 형태로 결과로 출력하고 laaply 는 리스트 형태로 결과를 출력합니다. 복잡해 보이지만 예제를 통해 쉽게 이해할 수 있습니다. 먼저 데이터프레임을 하나 정의해봅시다. Math=c(94,82,45,55,67) English=c(88,86,56,90,50) Science=c(87,76,65,43,55) df=data.frame(Math,English,Science) > df Math English Science 1 94 88 87 2 82 86 76 3 45 56 65 4 55 90 43 5 67 50 ..
2023. 4. 3.
[R강의] 149. 벡터나 데이터프레임을 그룹별로 나눠 리스트에 저장 (split)
split 함수는 벡터나 데이터프레임을 그룹별로 나눠 리스트에 저장해주는 함수입니다. 어떻게 사용되는지 알아봅시다. 1. 벡터를 그룹별로 나눠 리스트에 저장 아래와 같은 벡터가 있다고 합시다. v=c(1,2,3,4,5,6,7,8,9) 각 값들은 아래와 같은 그룹에 속한다고 합시다. 그룹은 factor로 정의합니다. f=factor(c('A','A','B','A','A','B','A','A','B')) split 함수를 사용해봅시다. > split(v,f) $A [1] 1 2 4 5 7 8 $B [1] 3 6 9 2. 데이터프레임을 그룹별로 나눠 리스트에 저장 위에서 정의한 벡터와 요인으로 데이터프레임을 만들어봅시다. df=data.frame(v,f) > df v f 1 1 A 2 2 A 3 3 B 4 4..
2023. 3. 29.
[R강의] 148. with 함수와 그래프 (열이름을 표현식에 사용)
with 함수란? with 함수가 무엇인지 알아보고, with 함수를 그래프와 어떻게 함께 사용되는지도 알아봅시다. with 함수의 기본적인 형태는 아래와 같습니다. with(data,표현식) data에는 데이터프레임이나 리스트가 올 수 있습니다. with 함수는 데이터프레임에 있는 열 이름을 표현식에 바로 사용할 수 있게 해주는 함수입니다. with 함수를 사용하기 위해 아래와 같은 데이터프레임을 하나 정의해봅시다. df=data.frame(A=c(1,2,3),B=c(4,5,6),C=c(7,8,9)) > df A B C 1 1 4 7 2 2 5 8 3 3 6 9 아래와 같이 코드를 입력해봅시다. 어떤 결과가 출력될까요? with(df, A) A가 출력됩니다. > with(df,A) [1] 1 2 3 벡..
2023. 3. 28.