(在R数据框中选择所有适用的)调查答案

时间:2015-12-17 01:28:07

标签: r

我正在使用Windows7和Rstudio。我有一个数据框,其中有几列包含4个答案或NAs的因子混合(4个答案,选择所有适用的选项或选择无)。我有一段时间将这些级别分开,以便我可以判断有多少受访者选择了这些。

data<- c("cats", "dogs", "cats, dogs", "cats, dogs, birds(with, commas, randomly)")
data<-data.frame(as.factor(data))
df<-as.data.frame(cbind((1:100),data))
df[,1]<-NULL
df

如何显示用户选择了狗(一个级别)和猫(另一个级别),而不是选择狗和猫(作为单个级别,单独形式的狗和/或猫)?

也就是说,我该如何展示: 狗是1 猫是2 狗和猫是1,2 狗,猫和鸟是1,2,3,而不会遇到逗号问题,当然,如果有必要,还可能采用其他方式

我上下搜索了Google,我只是没有得到它。我无法正确使用mChoice功能(Hmisc包),我遇到了各种各样的问题。我希望我能在这个课程中找到解决方案,特别是,但我相信无济于事。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我们可以尝试gsubfn

library(gsubfn)
gsubfn('\\w+', list('dogs'=1, 'cats'=2, 'birds'=3), data)
#[1] "2"       "1"       "2, 1"    "2, 1, 3"

注意:我认为(with, commas, randomly)部分就像说etc...一样。即使它已经存在于数据中,gsubfn解决方案也将返回输出。

或者其他选项会拆分字符串,然后转换为factor并强制转换为numeric

sapply(strsplit(data, ',\\s*'), function(x)
    toString(as.numeric(factor(x, levels=c('dogs', 'cats', 'birds')))))
#[1] "2"       "1"       "2, 1"    "2, 1, 3"

数据

data <- c("cats", "dogs", "cats, dogs", "cats, dogs, birds")