如何将一个因子转换为数值二元变量?

4

我有一个包含不同类型网站(因素)的列:

Localisation
     A  
     A  
     B  
     A 
     B 
     B

我想创建一个新列,其中二进制值(数字)对应于本地化列: A = 1且B = 0
Localisation Binom 
     A         1
     A         1
     B         0
     A         1
     B         0
     B         0

感谢!

3
这句话的意思是:如果df数据框中的localisation变量是"A",则将binom变量设为1,否则设为0。 - NelsonGon
3
"=="同样有效。 - Edward
3
更快地计算:2L - as.integer(df$localisation)。将数据框df中的localisation列转换为整数,然后用2L减去该列的值。 - Rui Barradas
3个回答

4

方法,在存在两个以上if-else条件时非常方便。

df <- read.table(stringsAsFactors = T, header = T, text = "Localisation
+      A  
+      A  
+      B  
+      A 
+      B 
+      B")

df %>% mutate(Binom = case_when(Localisation == "A" ~ 1, #condition1
                                Localisation == "B" ~ 0) #condition2
             )

3

这里有几个替代方案。

library(dplyr)
library(microbenchmark)

mb <- microbenchmark(
  NelsonGon = ifelse(df$Localisation %in% "A",1,0),
  Edward = ifelse(df$Localisation == "A",1,0),
  Edward2 = +(df$Localisation == "A"),
  Rui = 2L - as.integer(df$Localisation),
  massisenergy = df %>% mutate(Binom = case_when(Localisation == "A" ~ 1, #condition1
                                                 Localisation == "B" ~ 0) #condition2
  )
)

print(mb, unit = "relative", order = "median")
#Unit: relative
#         expr        min         lq       mean     median        uq        max neval cld
#          Rui   1.000000   1.000000   1.000000   1.000000  1.000000  1.0000000   100 a  
#    NelsonGon   4.107345   3.041659   2.490878   2.679642  2.341985  0.4714148   100 ab 
#      Edward2   4.358608   3.339862   2.834451   3.032853  2.741840  1.0814972   100 ab 
#       Edward   7.631876   5.320371   4.330419   4.575165  3.967027  1.4852678   100  b 
# massisenergy 247.792745 161.000287 117.762537 131.729545 96.032138 22.5566734   100   c

数据。

Localisation <- scan(what = character(), text = '
A  
A  
B  
A 
B 
B')
df <- data.frame(Localisation)

1
另一个选项是:
+(df$Localisation != "B")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接