2016-09-27 18 views
0

我有3個級別的R中的一個因素變量data.frame使用grepl填補變量值產生中的R奇怪的結果

'data.frame': 23848 obs. of 14 variables: 
$ Factor_var  : Factor w/ 3 levels "AAA","BBB",..: 1 1 3 3 3 3 2 2 2 2 ... 

我要覆蓋值中的一個與不同的使用grepl功能,但只有當它是值的一個串 - 否則它應保持不變

DF$Factor_var <- ifelse(grepl("AAA", DF$Factor_var), "ZZZ", DF$Factor_var) 

已經運行這個轉換後,我回去CHR變量只ST環值,我只是inpute,並參照老弦

'data.frame': 23848 obs. of 14 variables: 
    $ Factor_var  : chr "ZZZ" "ZZZ" "3" "3" ... 

,而我仍然期待着與水平「ZZZ」的因子變量的水平值值,「BBB」 ...等

這是爲什麼?我無法解決這個問題!

THX

+4

如果它是一個因子,那麼改變水平即水平(DF $ Factor_var)< - ifelse(grepl(「AAA」,levels(DF $ Factor_var)),「ZZZ」,水平(DF $ Factor_var))' – akrun

回答

0

由於數據已經是一個因素你可以改變在這一點上與levels()<- 無需水平,爲grepl()ifelse()。 所以只是做:

levels(DF$Factor_var) <- c("ZZZ","BBB","CCC") 

例如:

var1 <- c("AA", "BB", "CC", "AA", "BB", "CC") 
df <- data.frame(var1) 

> df$var1 
[1] AA BB CC AA BB CC 
Levels: AA BB CC 

,然後就去做:

levels(df$var1) <- c("ZZ","BB","CC") 

導致:

df$var1 
[1] ZZ BB CC ZZ BB CC 
Levels: ZZ BB CC 

str(df) 
'data.frame': 6 obs. of 1 variable: 
$ var1: Factor w/ 3 levels "ZZ","BB","CC": 1 2 3 1 2 3 
0

使用替換功能的相同

xy <-levels(df$Factor_var) 

xy <- replace(xy,xy%in%"AAA","ZZZ") 

levels(df$Factor_var) <- xy