使用自定义名称

时间:2016-06-15 00:55:49

标签: r

我有一个用户表,其中包含大约5个属性集(年龄,性别,家庭收入,职业,州)。对于每个属性,都有一个二进制赋值(即如果它们具有属性则为1,如果它们没有,则为0。

示例:

Index   Female   Male   Age 18-34   Age 35-64   Age 65+
1       1      0        1           0           0
2       1      0        0           1           0
3       0      1        1           0           0

然后我利用交互功能为每个属性集创建一个交互变量,虽然它给出了正确的输出,但它并不理想:

公式:

data$GENDER <- with(data, interaction(data$Female, data$Male, sep=""))

输出:

Index   Gender
1       10
2       10
3       01

理想情况下,我喜欢以下内容:

Index   Gender
1       F
2       F
3       M

有没有一种简单的方法可以做到这一点而无需对每个交互变量值进行分类(即10 = F,01 = M)?

提前致谢,

斯图

3 个答案:

答案 0 :(得分:3)

这是我编写的一个小函数,应该能够很好地处理这个函数,并在未选择类别或选择多个类别的实例中报告NA值:

pickbin <- function(data) {
  x <- NA
  sel <- rowSums(data) == 1
  x[sel] <- max.col(data,"first")[sel]
  names(data)[x]
}

pickbin(dat[2:3])
#[1] "Female" "Female" "Male"  
pickbin(dat[4:6])
#[1] "Age18_34" "Age35_64" "Age18_34"

dat的位置:

dat <- read.table(text="
Index   Female   Male   Age18_34   Age35_64   Age65
1       1      0        1           0           0
2       1      0        0           1           0
3       0      1        1           0           0",header=TRUE)

答案 1 :(得分:1)

我们也可以使用pmax

c("F", "M")[do.call(pmax, df1[2:3]*col(df1[2:3]))]
#[1] "F" "F" "M"

答案 2 :(得分:0)

尝试:

mydata<-read.table(header = T, text = "
Index   Female   Male   Age_18-34   Age_35-64   Age_65+
1       1      0        1           0           0
2       1      0        0           1           0
3       0      1        1           0           0")

mydata$Gender<-with(mydata, ifelse(Female ==1, "F" ,ifelse(Male ==1, "M", NA)))
mydata

Index Female Male Age_18.34 Age_35.64 Age_65. Gender
1      1    0         1         0       0      F
2      1    0         0         1       0      F
3      0    1         1         0       0      M