2017-02-23 11 views
0

У меня есть кадр данных:как добавить новый фактор в R

a <- c("",1,2,3,2,2,1,3,"") 
b <- c(1,2,3,4,5,3,8,2,8) 
a1 <- as.factor(a) 
f <- data.frame(x=a1,y=b) 
f 
 
x y 
1 1 
2 1 2 
3 2 3 
4 3 4 
5 2 5 
6 2 3 
7 1 8 
8 3 2 
9 8 

х столбец является фактором, но я хочу добавить фактор «0» нулевому место, например, Я хочу использовать if(is.na(f$x)) f$x <- 0, но он показывает предупреждение:

 
Warning message: 
In if (is.na(f$x)) f$x 1 and only the first element will be used

и я использую:

for(i in 1:nrow(f)){ 
if(is.na(f$x[i])){ 
    f$x[i] <- 0 
} 
} 

, но это не имеет никакого отношения. Как я могу решить эту проблему? Спасибо за помощь!

+0

Так это больше кадр данных, которые вы пытаетесь сделать это? –

+0

Да, это большой кадр данных. – littlely

+0

Я изменяю коэффициент на числовое значение, затем добавляю 0 к нулевому месту, а затем меняю его на коэффициент, он работает, но у вас есть лучшая идея? (Фактор - это китайский характер по происхождению, и я его изменил к числовому коэффициенту.) – littlely

ответ

0

Вам не нужно для цикла, более быстрый способ является

a <- c("",1,2,3,2,2,1,3,"") 
> b <- c(1,2,3,4,5,3,8,2,8) 
> a1 <- as.factor(a) 
> f <- data.frame(x=a1,y=b) 
> 
> f$x <- ifelse(f$x=="",0,f$x) 
> f$x 
[1] 0 2 3 4 3 3 2 4 0 
> f$x <- as.factor(f$x) 
> str(f) 
'data.frame': 9 obs. of 2 variables: 
$ x: Factor w/ 4 levels "0","2","3","4": 1 2 3 4 3 3 2 4 1 
$ y: num 1 2 3 4 5 3 8 2 8