반응형
아래와 같은 데이터프레임이 있다고 합시다.
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 위치를 출력해주는 코드를 짜봅시다. 아래와 같습니다.
#데이터프레임
v1=c(NA,2,3,4,NA)
v2=c(10,20,NA,NA,50)
df=data.frame(v1,v2)
#데이터 프레임 NA 위치 출력
res=data.frame(row=NA,col=NA)
for (i in 1:dim(df)[1]){
for (j in 1:dim(df)[2]){
if (is.na(df[i,j])){
res=rbind(res,c(i,j))
}
}
}
res=res[-1,] #첫 행 제거, 첫행은 NA였음
rownames(res)=NULL #행 이름 초기화
for문의 i는 행이고 j는 열입니다. df[i,j] 가 NA인지 확인하고, 맞다면 res라는 데이터프레임에 i,j 를 추가합니다.
출력 결과는 아래와 같습니다.
> res
row col
1 1 1
2 3 2
3 4 2
4 5 1
이제 함수로 만들어봅시다. 함수 이름은 where.na.df 로 했습니다.
where.na.df=function(df){
res=data.frame(row=NA,col=NA)
for (i in 1:dim(df)[1]){
for (j in 1:dim(df)[2]){
if (is.na(df[i,j])){
res=rbind(res,c(i,j))
}
}
}
res=res[-1,]
rownames(res)=NULL
return(res)
}
함수를 사용해봅시다.
> where.na.df(df)
row col
1 1 1
2 3 2
3 4 2
4 5 1
반응형
'R 주제 > R 기초 및 통계 강의' 카테고리의 다른 글
[R강의] 166. 개월에 따른 시계열 그래프 그리기 (ggseasonplot) (0) | 2023.08.29 |
---|---|
[R강의] 165. 데이터프레임의 특정 열을 기준으로 결측치를 제거하는 방법 (1) | 2023.08.29 |
[R강의] 163. 벡터 결측치의 위치를 알려주는 함수 만들기 (0) | 2023.08.29 |
[R강의] 162. 데이터프레임 특정 열을 기준으로 오름차순, 내림차순 정렬하기 (0) | 2023.08.29 |
[R강의] 161. 데이터프레임 행과 열을 제거하는 방법 (0) | 2023.04.26 |
댓글
만다린망고님의
글이 좋았다면 응원을 보내주세요!
이 글이 도움이 됐다면, 응원 댓글을 써보세요. 블로거에게 지급되는 응원금은 새로운 창작의 큰 힘이 됩니다.
응원 댓글은 만 14세 이상 카카오계정 이용자라면 누구나 편하게 작성, 결제할 수 있습니다.
글 본문, 댓글 목록 등을 통해 응원한 팬과 응원 댓글, 응원금을 강조해 보여줍니다.
응원금은 앱에서는 인앱결제, 웹에서는 카카오페이 및 신용카드로 결제할 수 있습니다.