【问题标题】:How do I replace multiple character strings in a column to numbers如何将列中的多个字符串替换为数字
【发布时间】:2018-02-01 21:10:40
【问题描述】:

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

我尝试过使用 gsub、replace 函数和这种格式的代码:

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

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

[<-.data.frame(*tmp*, Test$Gender == "F", , value = list( : 数据的下标赋值中不允许缺失值 帧

我需要做什么才能正确地将 M 和 F 替换为 0 和 1?

【问题讨论】:

  • Test %>% mutate(Gender = ifelse(Gender == "M",1,0))

标签: r replace gsub


【解决方案1】:

一种可能的方法是通过操纵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)获得第一个值。

【讨论】:

  • 知道了,非常感谢!我不得不使用 Gender = gsub(2, 0, Gender),然后使用 Gender = as.numeric(Gender),但它现在看起来应该有。感谢您的帮助!
  • gsub 用于字符向量,在这里你有一个更简单的情况,你正在处理一个因素。因此,仅操纵关卡是一种好方法。
【解决方案2】:

使用Tidyverse 方法:

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

然后您创建一个新变量,将旧变量编码为具有所需值的新变量。

  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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-01
    • 2022-01-03
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    相关资源
    最近更新 更多