我确信这是一个简单的问题,但在网上找不到任何澄清的内容。我正在使用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,我需要做什么?
答案 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