2017-04-03 13 views
0

이것은 "Codes"를 범주 형 변수로 포함하는 "조사"데이터 집합입니다. 다음과 같이 코드에서if-else 조건 또는 다른 접근 방법을 사용하여 범주 형 변수 값 바꾸기

ID<- seq(1:50) 
Codes<- sample(c("Sat1", "Sat2", "A1", "B2", "C2", "D5", "T4"), 50, replace= TRUE) 
Survey<- data.frame(Codes) 

수준은 같습니다

> levels(Survey$Codes) 
[1] "A1" "B2" "C2" "D5" "Sat1" "Sat2" "T4" 

내가 "SAT1"새로운 가치 "Sat3"와 "SAT2"를 제외하고 코드 열의 모든 값을 대체합니다.

> levels(Survey$Codes) 
[1] “Sat1” “Sat2” “Sat3” 

내가

levels(Survey$Codes)<- c(levels(Survey$Codes), “Sat3”) 

즉,이 문제에 대한 코드의 첫 번째 부분을 알고 있지만 나는 나머지를 진행하는 방법을 붙어있다 : 즉, 나는 코드 내 수준이 될 것으로 기대 코드 (예 : "Sat1"및 "Sat2"제외)의 모든 값을 "Sat3"으로 바꾸는 방법 여기에 if-else 문을 사용하려고 생각하지만 코드를 프레임화하는 방법을 모릅니다. 이걸 좀 도와 주시겠습니까? 감사합니다

답변

3

방법에 대한

levels(Survey$Codes)[!grepl("Sat",levels(Survey$Codes))]<-"Sat3" 

grepl 검사 특정 문자열은 수준에서 발생합니다. 출력 :

> levels(Survey$Codes) 
[1] "Sat3" "Sat1" "Sat2" 

> Survey$Codes 
[1] Sat3 Sat1 Sat3 Sat2 Sat3 Sat3 Sat3 Sat3 Sat3 Sat3 Sat3 Sat3 Sat1 Sat3 Sat2 Sat3 Sat1 Sat3 Sat1 Sat2 Sat3 Sat3 Sat3 Sat2 Sat3 
[26] Sat1 Sat3 Sat3 Sat3 Sat3 Sat3 Sat3 Sat3 Sat2 Sat3 Sat3 Sat1 Sat3 Sat3 Sat3 Sat3 Sat2 Sat3 Sat3 Sat3 Sat2 Sat3 Sat3 Sat3 Sat3 
Levels: Sat3 Sat1 Sat2 
0

당신이 만들고 싶었 데이터 프레임을 가정했다 : 문제에 대한

Survey<- data.frame(ID = seq(1:50), 
        Codes = sample(c("Sat1", "Sat2", "A1", "B2", "C2", "D5", "T4"), 50, replace= TRUE)) 

하나 개의 솔루션이

levels(Survey$Codes)<- c(levels(Survey$Codes), "Sat3") 
Survey$Codes[!grepl("Sat1|Sat2", Survey$Codes)] <- "Sat3" #replace if level is either Sat1 or Sat2 

을하고 더 이상 발생하지 않는 요소의 수준을 떨어 것 :

Survey$Codes <- factor(Survey$Codes) 
+0

위대한 작품입니다. 감사합니다 – Rookie

0

다음을 시도해보십시오.

levels(Survey$Codes)[!levels(Survey$Codes) %in% c("Sat1", "Sat2")]<- "Sat3" 

#> levels(Survey$Codes) 
#[1] "Sat3" "Sat1" "Sat2" 

좀 더 일반적인 해결책입니다. 예를 들어, 관심 수준에 공통적 인 특성이없는 경우 grepl 솔루션이 작동하지 않습니다.

+0

이것은 내가 찾고있는 간단한 논리입니다. – Rookie