在R中如何将值为yes或no的变量转换为1和0?

tpgth1q7  于 2023-02-06  发布在  其他
关注(0)|答案(4)|浏览(901)

我正在处理一个员工流失数据集。有一个名为“流失”的列,它包含1470个yes和no值。我想将这些yes和no值转换为1和0。我在R中安装了dplyr包来使用mutate函数,但我在转换时遇到了问题。下面是我尝试的方法:
clean %>% mutate(empAttrcopy$attrition=ifelse(empAttrcopy$attrition=="NO",0,1)) Error: unexpected '=' in "clean %>% mutate(empAttrcopy$attrition="

kyvafyod

kyvafyod1#

假设attrition只包含“YES”或“NO”值,这应该可以工作。首先是一些可重现的数据:

set.seed(42)
attrition <- sample(c("YES", "NO"), 15, replace=TRUE)
attrition
#  [1] "YES" "YES" "YES" "YES" "NO"  "NO"  "NO"  "NO"  "YES" "NO"  "YES" "NO"  "YES" "NO"  "YES"
attrition <- as.numeric(attrition=="YES")
attrition
#  [1] 1 1 1 1 0 0 0 0 1 0 1 0 1 0 1

为了简单起见,我省略了empAttrcopy$前缀。

beq87vna

beq87vna2#

我怀疑您有一个名为“empAttrcopy”的 Dataframe ,希望对列“attraction”进行虚拟编码,并将其存储到一个名为“clean”的新 Dataframe 中。
使用dplyr时,管道%>%(最初来自magrittr)计算它左边的内容,并将结果作为输入提供给右边的下一个函数。因此,如果你想改变“empAttrcopy”中的一列,你需要将它放在第一个%>%之前。当你这样做时,R知道你正在使用“Attrition”,因此在管道传输之后不需要反向引用它(即不需要$)。

empAttrcopy %>% mutate(attrition = ifelse(attrition == "No", 0, 1))

如果您想将变异列的输出存储到一个名为“clean”的新 Dataframe 中,请在开始时使用<-或在结束时使用->对其进行赋值。

clean <- empAttrcopy %>% mutate(attrition = ifelse(attrition == "No", 0, 1))

# or

empAttrcopy %>% mutate(attrition = ifelse(attrition == "No", 0, 1)) -> clean

最后但并非最不重要的一点是,最好将输出存储在一个新列中(例如,将其保存到“attraction_dummy”),这样就不会丢失任何数据。

clean <- empAttrcopy %>% mutate(attrition_dummy = ifelse(attrition == "No", 0, 1))
nvbavucw

nvbavucw3#

您可以只使用base包中提供的ifelse函数。 视情况而定。

a = c(5,7,2,9)
(a %% 2 == 0,"even","odd")

[1] "odd"  "odd"  "even" "odd"
rqenqsqc

rqenqsqc4#

试试这个:

empAttrcopy$attrition=ifelse(empAttrcopy$attrition=="YES", 1 , 0)

empAttrcopy$attrition1=ifelse(empAttrcopy$attrition=="YES", 1 , 0)

我通常会添加新列,以便将原始变量attrition与新创建的attrition1进行比较。YES = 1,NO = 0。
干杯!

相关问题