이런 질문을 남겨도 되나 죄송하긴하지만...R을 하다가 어떻게 할지 모르겠어서 질문 남깁니다ㅠㅠ!.
첨부한 표와 같이 데이터가 구성되어있다고 하면,
저기서 9가 포함되어 있는 열을 id 기준으로 삭제하려고 하는데, 9가 포함되어 있는 열을 다 지우는게 아니라 숫자가 입력되어 있는 id중 9말고 다른 숫자가 있으면
삭제 하지 않고, 입력되어 있는 값이 9만 있으면 삭제하려고 조건을 주려면 어떻게 해야하나요...?
도움 주시면 감사하겠습니다!
Comment 1
-
cardiomoon
2017.08.01 15:12
특정조건을 만족하는 Row 삭제
먼저 예제 데이터를 만들어 data.csv에 저장하였습니다. 이 파일을 읽어 data에 저장합니다.
data=read.csv("test.csv")
data
ID a b c d e f g
1 101 NA NA NA NA NA NA NA
2 102 9 10 NA NA NA NA NA
3 103 NA 9 NA NA NA NA NA
4 104 NA NA 9 9 NA NA NA
5 105 NA NA 1 8 9 NA NA
6 106 NA NA NA NA NA NA NA
7 107 NA 2 NA NA NA NA NA
8 108 NA NA 4 7 NA NA 9
다음으로 x라는 벡터를 읽어 NA값을 제외한 후 x에 9만 포함되어 있으면 TRUE, 9 이외에 다른 값이 있으면 FALSE를 반환하는 함수를 만듭니다.
seek9only=function(x){
x=x[!is.na(x)]
if(length(unique(x))!=1) result<-FALSE
else if(unique(x)==9) result<-TRUE
result
}
apply 함수를 이용해 data의 열을 기준으로 이 함수를 적용시킵니다.
select<-apply(data,2,seek9only)
select
ID a b c d e f g
FALSE TRUE FALSE FALSE FALSE TRUE FALSE TRUE
원하는 데이터는 다음과 같이 고르시면 됩니다.
data1<-data[!select]
data1
ID b c d f
1 101 NA NA NA NA
2 102 10 NA NA NA
3 103 9 NA NA NA
4 104 NA 9 9 NA
5 105 NA 1 8 NA
6 106 NA NA NA NA
7 107 2 NA NA NA
8 108 NA 4 7 NA