2016-04-28 2 views
0

Я хотел бы преобразовать последовательность чартера в числовую последовательность.конвертировать 1 символьную строку в числовые значения

Моя переменная называется labCancer и сделан так:

labCancer 

[1] M M M M M M M M M M M M M M M M M M M B B B M M M M M M M M M M M M M M M B 

Я хотел бы иметь:

[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 0 

Я попытался с помощью

labCancer_2 <- labCancer 

for (i in 1:569) { 
    if (labCancer[i] == "M") { 
    labCancer_2[i] <- 1 
    } else { 

labCancer_2[i] <- 2 

} }  

но это не Работа.

Andrea

ответ

0

Одно из решений для преобразования вектора к фактору, а затем в целое число. Это приведет всех уникальных значений исходного вектора, чтобы получить отдельное целое число:

> x <- c("m", "b", "m", "b") 
> x 
[1] "m" "b" "m" "b" 
> as.factor(x) 
[1] m b m b 
Levels: b m 
> as.integer(as.factor(x)) 
[1] 2 1 2 1 
> c(0, 1)[as.numeric(as.factor(x))] 
[1] 1 0 1 0 

Используя трюк в последней строке можно легко изменить номера, чтобы соответствовать 0 и 1.

0

В зависимости от что вы используете данные, до тех пор, пока у вас есть только два значения, вы можете сделать это:

labCancer_2 <- ifelse(lab_cancer=="M", 1, 0) 

Если у вас есть несколько значений, или вы хотите, чтобы письма вокруг для справки или графиков, вы можете сделать вектор a фактор:

labCancer_2 <-factor(lab_cancer, levels=c("B", "M")) 

Однако фактор начинается с 1, так что ваш вектор будет 2 2 2 2 ... 1 1 1 ...
, а не
1 1 1 1 ... 0 0 0. ..

1

Единственная причина, по которой я могу думать, что это не приведет к тому, что этот цикл не будет работать, это отказ инициализировать labCancer_2. Таким образом, вы хотели бы сделать это до запуска цикла:

labCancer_2 <- numeric(length(labCancer)) 

Если вы хотите присвоить элемент объекта с помощью элемента в цикле, вам необходимо инициализировать этот объект первым, или он должен иначе существовать в какой-либо способ.

Однако, есть лучший способ сделать это, что не требует инициализации и был бы так многие утверждают, вы должны сделать это в R

labCancer_2 <- ifelse(labCancer == "M", 1, 0) 

Это имеет преимущество векторизации АиР.

Смежные вопросы