2016-09-27 41 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