2014-04-29 2 views
1

아래에서 작업중인 데이터의 샘플. 이미 모든 행에 "NA"가 생략되었습니다.유효하지 않은 Factor Level, NA 생성됨 R

gss.s[1:5,] 
     abany   advfront arrest 
2  YES    Agree  NO 
3  YES Strongly agree  YES 
10  YES    Agree  YES 
16  YES    Agree  NO 
21  NO Strongly agree  NO 

"예"를 abany 열의 1로 바꾸고 "아니오"를 -1로 대체하려고합니다. replace replace (gss.s [, 1], "YES", 1)를 사용했지만 오류가 발생했습니다. 잘못된 요소 수준, NA가 생성되었습니다. 이 동일한 문제에 대한 이전 게시물을 읽고 내 문제에 대한 솔루션을 적용하는 방법을 알아낼 수 없습니다.

+0

문제가 1과 -1 당신의 인자 수준으로 정의되지 않은 것입니다, 아마 YES와 NO만을 포함 할 것이다. 변수를 레벨로 추가하거나 변수 유형을 인수가 아닌 문자로 재정의 할 수 있습니다. –

답변

2

열에 ifelse()을 사용하여 모든 값을 한 번에 변경할 수 있습니다.

gss.s$abany <- ifelse(gss.s$abany == "YES", 1, -1) 
gss.s 
## abany  advfront arrest 
## 2  1   Agree  NO 
## 3  1 Strongly agree YES 
## 10  1   Agree YES 
## 16  1   Agree  NO 
## 21 -1 Strongly agree  NO 
+0

다른 빠른 질문이 하나 있습니다. 어떻게하면 advfront 열에서 2로 강하게 대체 할 수 있고, 1에 동의하고, -1에 동의하지 않으며, -2와 크게 반대 할 것입니다. ifelse()로 한 번에 하나씩 시도했지만 작동하지 않았습니다. 여기에 내가 한 일이있다. $ advfront <- ifelse (gss.s $ advfront == "동의하지 않는다", -1, gss.s $ advfront). 이것은 "동의하지 않음"이 아닌 값을 원래의 값으로 두지 않았습니다. 이것을 할 수있는 방법을 알고 있습니까? BTW는 끔찍한 포맷팅에 대해 유감스럽게 생각합니다. 나는 어떤 이유로 코멘트에 코드 블록을 얻을 수 없었다. – Hound

+0

이 댓글에 응답하지 않아 죄송합니다. 나는 잊어 버렸음에 틀림 없다. 1 년 반 전에 보니 지금 분류 해 놓은 것 같습니까? –

+0

네, 그래도 확인해 봤어! – Hound

2
y <- data.frame ("abany"=c("YES","YES","YES","YES","NO"), 
      "advfront"=c("Agree","Strongly Agree","Agree","Agree","Strongly Agree"), 
      "arrest"=c("NO","YES","YES","NO","NO")) 

나는 다른 방법으로 시도 할 것 : 문자 변환 계수 열이 컬럼의 값을 변경할 수있는 문제가 없습니다 그래서 지금

y$abany <- as.character.factor (y$abany) 

y[y$abany=="YES", "abany"] <- 1 
y[y$abany=="NO", "abany"] <- -1 
0

변경하려는 내용을 정의하는 벡터를 만들 수도 있습니다. ifelse 진술과 비교하여 큰 데이터 집합을 가지고 있다면 훨씬 더 빠릅니다.

translate <- c(YES=1,NO=-1) 
gss.s$abany2 <- translate[as.character(gss.s$abany)] 
gss.s 

# abany  advfront arrest abany2 
# 1 YES   Agree  NO  1 
# 2 YES Strongly agree YES  1 
# 3 YES   Agree YES  1 
# 4 YES   Agree  NO  1 
# 5 NO Strongly agree  NO  -1 

당신은 또한 당신이 만드는 여러 변경 사항이있는 경우 중첩 된 ifelse 기능과 함께 투쟁 할 필요가 없습니다 :

translate2 <- c('Strongly agree'=2,Agree=1,Disagree=-1,'Strongly disagree'=-2) 
gss.s$advfront2 <- translate2[as.character(gss.s$advfront)] 
gss.s 

# abany  advfront arrest abany2 advfront2 
# 1 YES   Agree  NO  1   1 
# 2 YES Strongly agree YES  1   2 
# 3 YES   Agree YES  1   1 
# 4 YES   Agree  NO  1   1 
# 5 NO Strongly agree  NO  -1   2