2016-04-28 55 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的矢量化的优势。