我正在使用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包),我遇到了各种各样的问题。我希望我能在这个课程中找到解决方案,特别是,但我相信无济于事。
感谢您的帮助。
答案 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")