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

R 如何将列中的多个字符串替换为数字,r,replace,gsub,R,Replace,Gsub,我相信这是一个简单的问题,但在网上找不到任何可以澄清的东西。我正在R中处理一个CSV文件,有一个标有性别的列,有两个级别“M”和“F”。我试图更改变量,使F=1和M=0,两者都是数字类型。我需要插入什么代码才能更改性别 我已尝试使用gsub、替换函数和以下格式的代码: Test[Test$Gender == "F",]$Gender = 1 当我输入上面的代码时,它返回错误消息: [一种可能的方法中的错误,通过操纵性别的水平: #dummy data: Test = data.frame(Ge

我相信这是一个简单的问题,但在网上找不到任何可以澄清的东西。我正在R中处理一个CSV文件,有一个标有性别的列,有两个级别“M”和“F”。我试图更改变量,使F=1和M=0,两者都是数字类型。我需要插入什么代码才能更改性别

我已尝试使用gsub、替换函数和以下格式的代码:

Test[Test$Gender == "F",]$Gender = 1
当我输入上面的代码时,它返回错误消息:


[一种可能的方法中的错误,通过操纵
性别的水平:

#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

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

一种可能的方法是通过操纵
性别的级别

#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)获得第一个值。

使用
Tidyverse
方法:

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

使用
Tidyverse
方法:

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

明白了,非常感谢!我必须使用Gender=gsub(2,0,Gender),然后使用Gender=as.numeric(Gender),但它现在看起来应该是这样的。谢谢你的帮助!
gsub
是用于字符向量的,这里有一个更简单的例子,你在处理一个因子。所以仅仅操纵级别是一个很好的方法。明白了,非常感谢!我不得不使用Gender=gsub(2,0,Gender),然后使用Gender=as.numeric(Gender),但它现在看起来应该是这样的。感谢您的帮助!
gsub
是用于字符向量的,这里有一个更简单的例子,您处理的是一个因子。因此,仅操纵级别是一个很好的方法。
Test%>%mutate(Gender=ifelse(Gender=“M”,1,0))
Test%>%mutate(Gender=ifelse(Gender=“M”,1,0))