R中的重新编码:将2个数字数据行转换为一个因子行

时间:2013-11-26 14:56:50

标签: r r-factor

我有一个数据框:

> x = data.frame(var1 = c(0,0,1,1), var = c(0,1,0,1))

我想在该数据框中添加另一列,即基于var1和var2的值设置的因子。

factor "00" if both are 0 
factor "10" if var1 = 1 and var2 = 0
factor "01" if var1 = 0 and var2 = 1
factor "11" if both are 1

实际上我有大约10个变量,需要生成交叉表的因子来检查其他变量如何受因素影响。

我可以编写if语句来完成这项工作,但我认为必须有一种更聪明的方法。有什么建议吗?

3 个答案:

答案 0 :(得分:2)

您正在寻找interaction

 transform(x, Factor=interaction(var1, var,sep=''))

  var1 var Factor
1    0   0     00
2    0   1     01
3    1   0     10
4    1   1     11

答案 1 :(得分:1)

使用transformpaste0

> x <- transform(x, Factor=paste0(var1, var))
  var1 var Factor
1    0   0     00
2    0   1     01
3    1   0     10
4    1   1     11

> sapply(x, class) # checking class for each column
     var1       var    Factor 
"numeric" "numeric"  "factor"  

另一种选择是使用within

x <- within(x, Factor <- factor(paste0(var1, var)))

答案 2 :(得分:1)

只需创建一个新列 - 使用factorpaste0

> x$f = factor(paste0(x$var1,x$var))
> x
  var1 var  f
1    0   0 00
2    0   1 01
3    1   0 10
4    1   1 11