由于允许多个响应,我得到了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类:没有爱好。
我是否应该更改我的数据安排,例如虚拟编码(足球是/否,......)。
答案 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