2016-12-30 104 views
0

我是R新手。我有一个具有> 10000级别的因子对象。大多数这些级别都是我想要转换为数字的数字,但有几个级别包含我不想触及的说明。R:将因子的某些级别转换为数字

是否有一种很好的方法来隔离要转换为数字的因子的相关级别? as.numeric()会是一个不错的选择吗?

非常感谢!

回答

2

由于我们不能有多个类的列/载体,一个建议是子集仅numeric元件和将其转换回numeric使用as.numeric(as.character(

i1 <- grepl("^[0-9.]+$", v1) 
v2 <- as.numeric(as.character(v1[i1])) 
0
a1 <- factor(c(letters[1:3], '1', '2', '3')) 
levels(a1) 
# [1] "1" "2" "3" "a" "b" "c" 

a2 <- a1[1:3] 
levels(a2) 
# [1] "1" "2" "3" "a" "b" "c" 

# using @akrun grepl statement to weed out unused levels 
a2 <- factor(a2, levels(a2)[!grepl("^[0-9.]+$", levels(a2))]) 
levels(a2) 
# [1] "a" "b" "c" 

# use either @akrun grepl or this droplevels() function 
a2 <- droplevels(a2) 
# [1] a b c 
# Levels: a b c 

unclass(a2) 
# [1] 1 2 3 
# attr(,"levels") 
# [1] "a" "b" "c"