总结几个因素水平的反应

时间:2017-03-14 16:07:37

标签: r sum factors

由于允许多个响应,我得到了2个相同的变量。

让我们说,变量涉及爱好:1 =足球,2 =冰球,3 =我没有爱好

因此,人们可以有两个爱好:足球加冰球。

hobby1<-c(1,2,3)
hobby1<-factor(hobby1,labels("football", "ice hockey", "I have no hobbies")

hobby2<-c(1,2,3)
hobby2<-factor(hobby2,labels("football", "ice hockey", "I have no hobbies")

现在我尝试提取各种爱好,从0到2。

我已经尝试过了: sum(hobby1<2, hobby2<2)

如何做到这一点,sum-function不适用于各种因素? 另外,我的解决方案不会考虑第3类:没有爱好。

我是否应该更改我的数据安排,例如虚拟编码(足球是/否,......)。

1 个答案:

答案 0 :(得分:1)

虚拟编码可能是一种更简单的方法,因为一旦将数据转换为因子,您就无法轻松使用sum<操作。这种方法适用于基础R:

df <- data.frame(football = c(0, 1, 1, 0),
                 ice_hockey = c( 1, 1, 0, 0))
df$num_hobbies <- rowSums(df[, 1:2])
df
# football ice_hockey num_hobbies
#        0          1           1
#        1          1           2
#        1          0           1
#        0          0           0

或者使用dplyr更轻松地利用列名:

library(dplyr)
df <- data.frame(football = c(0, 1, 1, 0),
                 ice_hockey = c( 1, 1, 0, 0)) %>%
  mutate(num_hobbies = football + ice_hockey)
df
# football ice_hockey num_hobbies
#        0          1           1
#        1          1           2
#        1          0           1
#        0          0           0