投稿问答最小化  关闭

万维书刊APP下载

问卷中的一道填空题能有多少种回答?|R数据整理

2022/12/9 16:47:24  阅读:199 发布者:

转自:丁点帮你

小伙伴们,不知道你有没有通过问卷来收集数据的经历?这两天有个师妹找我,想我帮她解决一些整理问卷数据时遇到的问题。

看了这批数据,我有几个心得想分享给大家。

做好问卷设计,事半功倍

多重线性回归,一般是指有多个自变量X,只有一个因变量Y。前面我们主要是以简单线性回归为例在介绍,两者的差距主要在于自变量X的数量,在只有一个X时,就称简单线性回归本次我们数据链接:

问卷中有一个问题是“去年您的家庭平均每人的年收入是多少?”,这是一道填空题,单位是元。

我看到的答案有如下几种类型:

35000,这种属于我们希望得到的完美的答案,大部分人是照这种格式写的;

但也有相当一部分人给出了35千、47千、3.5万、5.5万、3.5w3w53-4万、6w-7w……这样的答案。

看到这些,我首先想到的是问卷的设计需要改进,一个好的问卷题目一定是既能保证问题表述精准并易于理解,同时又能够收集到格式统一的答案。

今天我们姑且不说问题表述得如何,只说这道题很明显无法收集到格式统一的答案,这给后期数据处理带来了很多麻烦。

站在答题者的角度,上面列出的各种答案基本都是符合题目要求的,但这并不符合研究者的预期。研究者不希望看到任何汉字、字母,只想要一个以“元”为单位的数字。

所以在设置答案的时候,很多研究者会设为选择题,比如下面这个问卷的问法:

如果想要获得准确的收入数值,那就应该在问卷中有清晰的标注,如在问题后面写一个说明:请填写具体数字,注意以“元”为单位;

或者把填空进行限定,如:                                            元;

采用问卷星等电子问卷时,还可以设置自动的逻辑查验,比如这个空只能填写1000以上的数字等;

此外,有时被调查者的文化程度、理解水平各不相同,为保证问卷质量,还可采用由调研员一对一调查并填写问卷的方法,此时需严格培训调研员。

千奇百怪的答案怎么快速整理好

多重线性回归,一般是指有多个自变量X,只有一个因变量Y。前面我们主要是以简单线性回归为例在介绍,两者的差距主要在于自变量X的数量,在只有一个X时,就称简单线性回归本次我们数据链接:

然而,对于师妹这套问卷,通过修改问卷设计来补救已经来不及了,我们只能运用软件来整理数据了。

首先,把汉字、英文字母都去掉,还记得我们讲过的gsub函数吗?这是一个很实用的替换函数。

如下面的三行代码分别将字符末尾的“万”、“w”、“千”都替换为了“什么都没有”。$表示字符末尾的意思。

注意,这里并不是替换为空格,而是什么都没有,相当于把末尾的“万”、“w”、“千”都删掉了。

关于gsub函数的更多详细介绍,可复习这篇文章:如何将杂乱的数据整理好() | 处理混乱的格式

data$income <-gsub('$','',data$income )

data$income <-gsub('w$','',data$income )

data$income <-gsub('$','',data$income )

35千、3w5这样的答案,我们不能简单地直接删掉其中的“万”和“w”,而是应该替换为小数点,如下:

data$income <-gsub('','.',data$income )

data$income <-gsub('w','.',data$income )

此时,35千、47千、3.5万、5.5万、3.5w3w53-4万、6w-7w……

就变成了3.54.73.5……3-46-7

接下来,我们处理3-46-7这种情况。其实在问卷调查时,应该尽量让被调查者回答具体的数值,如果实在不愿回答,那也应该问清楚,更接近3万,还是4万,还是3.5万?总之,要让被调查者自己确定一个数值。

但是如果我们已经无法追踪到被调查者,只能拟定一个合理的估计规则,比如取平均数,3-4就用3.5来代替。

但是,这样一个一个算又太麻烦了,下面一组代码可以帮我们解决这个问题。

其中的str_split函数很关键,顾名思义,它是用来分割字符的。

下面第二行代码的意思就是:以短横线-’为分割符号,将其前后的字符提取出来,形成两个单独的字符,然后将其中第一个字符赋值给data$incomelower

# 分割字符

library(stringr)

data$incomelower <- str_split(data$income,'-',n=2,simplify = TRUE)[,1]

data$incomeupper <-str_split(data$income,'-',n=2,simplify = TRUE)[,2]

# 将字符转变为数值

data$incomelower <-as.numeric(data$incomelower)

data$incomeupper <-as.numeric(data$incomeupper)

# 计算均值,生成新变量shouru

data<-transform(data,shouru=ifelse(is.na(incomeupper),incomelower,

(incomelower+incomeupper)/2))

举个简单的例子,感受一下str_split函数的功能。

好了,现在各种各样的符号都解决掉了,然后把这些被删掉了“万”/w”的数字都乘以10000

注意原来填写正确的数据不能乘以10000。我们通篇查看了数据,发现原来填写正确的数据都是大于1000的,且剩下的经过上面一系列处理的数据都小于50

也就是说,我们只需要对小于50的那部分数据乘以10000就可以了。

a<-which(data$income<50)

data[a,]<-transform(data[a,], income = income * 10000)

转自:“量化研究方法”微信公众号

如有侵权,请联系本站删除!


  • 万维QQ投稿交流群    招募志愿者

    版权所有 Copyright@2009-2015豫ICP证合字09037080号

     纯自助论文投稿平台    E-mail:eshukan@163.com