2016-04-28 79 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) 

,可以使矢量因素:

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) 

此以R的矢量化的優勢。