반응형
아래와 같은 데이터프레임이 있다고 합시다.
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 |
댓글