首页 文章

将值标签分配给变量的整形

提问于
浏览
1

我有一个数据框“CB”,列有“性别”,有两个变量“男性”和“女性” . 我希望“男性”获得值0,“女性”获得值1 .

我这样做了:

CB$gender <- ifelse(CB$gender == "Male", 0, ifelse(CB$gender == "Female", 1, 
999))

当我查看列时,我得到了这个结果:

head(CB$gender, 3)
[1] 1 0 0

没关系!

当我创建一个表时,我得到了这个结果:

table(CB$gender)

  0    1 
3555 3488

我希望0说“男”,1说“女”

为了更好地理解:

在SPSS中,可以将值0分配给“Male”,将值1分配给“Female” . 当我打印一个表时,它看起来像这样:

Male Female
3555 3488

但该列看起来像这样:

gender
0
1
1
0

这就是我要的 .

谢谢!

1 回答

  • 2

    您可以使用 factor 将变量转换为因子并标记它:

    CB <- data.frame(gender= c("Male", "Female", "Male", "Male", "Female", "Female", "Male", "Male"))
    CB$gender <- ifelse(CB$gender == "Male", 0, ifelse(CB$gender == "Female", 1, 999))
    str(CB)
    #'data.frame':  8 obs. of  1 variable:
    # $ gender: num  0 1 0 0 1 1 0 0
    CB$gender <- factor(CB$gender ,
                    labels=c("Male", "Female"))
    str(CB)
    #'data.frame':  8 obs. of  1 variable:
    # $ gender: Factor w/ 2 levels "Male","Female": 1 2 1 1 2 2 1 1
    table(CB$gender)
    #Male Female 
    #   5      3
    

    注意:R转换为因子从1分配级别(在这种情况下为1和2)

    或者,您可以使用包 lfactors

    library(lfactors)
    CB <- data.frame(gender= c("Male", "Female", "Male", "Male", "Female", "Female", "Male", "Male"))
    CB$gender <- ifelse(CB$gender == "Male", 0, ifelse(CB$gender == "Female", 1, 999))
    CB$gender <- lfactor(CB$gender,
                     levels=0:1,
                     labels=c("Male", "Female"))
    print(CB$gender)
    #[1] Male   Female Male   Male   Female Female Male   Male  
    #Levels: Male Female
    #Numeric levels: 0 1 
    table(CB$gender)
    #  Male Female 
    #     5      3 
    attributes(CB$gender)$llevels
    #[1] 0 1
    

    另一个最接近SPSS类比的选项是使用包 labelledsjmisc ,如下所示:

    library(labelled)
    library(sjmisc) #access to function to_label()
    CB <- data.frame(gender= c("Male", "Female", "Male", "Male", "Female", "Female", "Male", "Male"))
    CB$gender <- ifelse(CB$gender == "Male", 0, ifelse(CB$gender == "Female", 1, 999))
    val_labels(CB$gender) <- c("Male" = 0, "Female" = 1)
    print(CB$gender)
    #<Labelled double>
    #[1] 0 1 0 0 1 1 0 0
    #Labels:
    # value  label
    #     0   Male
    #     1 Female
    table(to_label(CB$gender))
    #  Male Female 
    #     5      3
    

    此外,您可以使用包 sjmiscsjlabelled 的组合 .

    library(sjmisc) #access to function to_label()
    library(sjlabelled) #function set_labels()
    CB <- data.frame(gender= c("Male", "Female", "Male", "Male", "Female", "Female", "Male", "Male"))
    CB$gender <- ifelse(CB$gender == "Male", 0, ifelse(CB$gender == "Female", 1, 999))
    CB$gender <- set_labels(CB$gender, labels=c("Male", "Female"))
    print(CB$gender)
    #[1] 0 1 0 0 1 1 0 0
    #attr(,"labels")
    #  Male Female 
    #     0      1 
    table(to_label(CB$gender))
    #  Male Female 
    #     5      3
    

    函数 to_label() 与包 lfactorslabelledsjlabelled 的工作方式类似 .

相关问题