R 주제/R 기초 및 통계 강의
[R강의] 164. 데이터프레임의 결측치 위치를 알려주는 함수 만들어보기
만다린망고
2023. 8. 29. 10:23
반응형
아래와 같은 데이터프레임이 있다고 합시다.
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
반응형