如何将列中的多个字符串替换为数字

时间:2018-02-01 21:10:41

标签: r replace gsub

我确信这是一个简单的问题,但在网上找不到任何澄清的内容。我正在使用R中的CSV文件,并且有一个标有Gender的列,其中包含2个级别“M”和“F”。我试图改变变量,使F = 1和M = 0,两者都是数字类型。我需要输入什么代码才能更改性别?

我尝试过使用gsub,替换函数和这种格式的代码:

Test[Test$Gender == "F",]$Gender = 1

当我输入上面的代码时,它会返回错误消息:

  

[<-.data.frame中的错误(*tmp*,测试$性别==“F”,,值=列表(   :在下标的数据分配中不允许缺少值   帧

为了正确地用0和1替换M和F,我需要做什么?

2 个答案:

答案 0 :(得分:3)

通过操纵Gender

的级别,可以采用一种方法
#dummy data:
Test = data.frame(Gender = factor(sample(c('M','F'), replace=T, size=10)))
# solution:    
Test$Gender = as.integer(factor(Test$Gender, levels=c('F','M')))-1

您可以使用levels选择哪个级别(M或F)获得第一个值。

答案 1 :(得分:1)

使用Tidyverse方法:

library(tidyverse)
Test <- data.frame(Gender=c("F","M","F","M"))
Test %>% 
    mutate(Gender_mod=case_when(
        Gender=="F" ~ 1,
        Gender=="M" ~ 0
    )

你创建了一个新变量,用一个具有desiderd值的新变量编码旧变量。

  Gender Gender_mod
1      F          1
2      M          0
3      F          1
4      M          0

或者您可以决定替换原始变量中的值:

Test %>% 
   mutate(Gender=as.numeric(str_replace_all(string=Gender,pattern=c("F","M"),replacement=c("1","0"))))

这是输出:

  Gender
1      1
2      0
3      1
4      0