如何将数字向量转换为二进制数?

3
我将一个因子转换为数字向量,即从“男”和“女”转换为“1”和“2”,使用R代码“as.numeric(data$Gender)”。但是,我想将数字向量转换为二进制数字,即从代表“男”的“1”和代表“女”的“2”,转换为代表“男”的“1”和代表“女”的“0”。请问有人可以告诉我如何完成这个操作吗?非常感谢您的帮助。

as.numeric(factor(c("male", "female"), levels=c("female", "male"))) - 1 - alan ocallaghan
1个回答

4
这里有三种替代方案:
示例数据:
set.seed(1)
x <- sample(c("Male", "Female"), 10, TRUE)
x
#  [1] "Male"   "Male"   "Female" "Female" "Male"   "Female" "Female" "Female" "Female" "Male"  

选项1:使用==(假定您只有这两个选项)。

as.numeric(x == "Male")
#  [1] 1 1 0 0 1 0 0 0 0 1

选项二:使用命名密钥。
key <- setNames(0:1, c("Female", "Male"))
key[x]
#   Male   Male Female Female   Male Female Female Female Female   Male 
#      1      1      0      0      1      0      0      0      0      1 

选项三:使用factor指定标签。
factor(x, c("Male", "Female"), labels = c(1, 0))
#  [1] 1 1 0 0 1 0 0 0 0 1
# Levels: 1 0

请注意,如果您想要一个数字向量,仍然需要使用as.numeric(as.character())
as.numeric(as.character(factor(x, c("Male", "Female"), labels = c(1, 0))))
#  [1] 1 1 0 0 1 0 0 0 0 1

大致与选项一相同,但在某些情况下会更快,我认为是 +(x == "Male") - lmo
@lmo,谢谢。我知道那个技巧,但是在我看来,使用as.numeric带来的微不足道的速度提升并不能抵消更明确的代码所带来的好处。更进一步,你可以使用as.integer代替as.numeric,它的性能更接近于+(在我的大多数测试中都超过了它)。 - A5C1D2H2I1M1N2O1R2T1

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