library(foreign)
>digitaldata<-read.spss("digital pruchase.sav",use.value.labels = TRUE,to.data.frame = TRUE)
>str(digitaldata)#读取的数据是未经处理的原始数据,需要进行数据清理
'data.frame': 24938 obs. of 22 variables:
$ ID : Factor w/ 24936 levels "0010018239","0010417158",..: 1 2 3 4 5 6 8 9 10 11 ...
$ gender: atomic 1 2 1 2 1 2 1 1 1 2 ...
..- attr(*, "value.labels")= Named num 2 1
.. ..- attr(*, "names")= chr "女" "男"
$ age : Factor w/ 12 levels "10岁以下","10-14岁",..: 4 4 7 12 4 6 8 8 11 5 ...
$ edu : Factor w/ 4 levels "高中-中专及以下",..: 1 2 2 3 2 3 3 2 1 1 ...
$ B1_1 : Factor w/ 2 levels "无","有": 1 1 2 1 1 1 2 2 1 2 ...
$ B1_2 : Factor w/ 2 levels "无","有": 2 2 2 2 2 2 2 2 2 2 ...
$ B1_3 : Factor w/ 2 levels "无","有": 2 2 1 1 2 2 1 2 1 2 ...
$ B1_4 : Factor w/ 2 levels "无","有": 1 1 2 1 1 2 1 1 1 1 ...
$ B1_5 : Factor w/ 2 levels "无","有": 1 2 2 2 1 2 1 2 2 1 ...
$ B1_6 : Factor w/ 2 levels "无","有": 2 2 2 1 2 2 1 2 1 1 ...
$ B1_7 : Factor w/ 2 levels "无","有": 1 2 2 1 2 2 1 1 1 1 ...
$ B1_8 : Factor w/ 2 levels "无","有": 1 1 1 1 1 1 1 1 1 1 ...
$ B2_1 : Factor w/ 8 levels "笔记本电脑","台式电脑",..: 1 1 1 1 2 1 5 1 2 2 ...
$ B2_2 : Factor w/ 8 levels "笔记本电脑","台式电脑",..: 3 6 2 6 4 5 6 2 4 7 ...
$ B2_3 : Factor w/ 8 levels "笔记本电脑","台式电脑",..: 5 NA 7 NA 6 6 7 4 NA NA ...
$ B3 : Factor w/ 2 levels "否","是": 2 2 1 1 1 1 2 1 1 2 ...
$ B4 : Factor w/ 13 levels "100元以下","100-199元",..: 6 13 NA NA NA NA 7 NA NA 7 ...
$ B5_1 : Factor w/ 2 levels "否","是": 1 2 NA NA NA NA 2 NA NA 1 ...
$ B5_2 : Factor w/ 2 levels "否","是": 1 1 NA NA NA NA 1 NA NA 1 ...
$ B5_3 : Factor w/ 2 levels "否","是": 1 1 NA NA NA NA 1 NA NA 1 ...
$ B5_4 : Factor w/ 2 levels "否","是": 2 1 NA NA NA NA 1 NA NA 2 ...
$ B5_5 : Factor w/ 2 levels "否","是": 1 1 NA NA NA NA 1 NA NA 1 ...
- attr(*, "variable.labels")= Named chr "" "性别" "年龄分段" "教育程度" ...
..- attr(*, "names")= chr "ID" "gender" "age" "edu" ...
- attr(*, "codepage")= int 936
#说明:
#1、读取进来的数据共24983条记录,22个变量,其中gender没有定义属性(未定义的变量在进行函数分析时会默认为数值型变量),其余变量全部为因子变量,最好将客户ID改为数值型变量
#2、B1是多选题,题目为:目前已经拥有的数码产品有哪些?包含8个选项。
#3、B2是多选题,题目为:未来优先打算购买的数码产品有哪些?包含8个选项,最多选3个。
#4、B3是单选题,题目为:是否有过网购经历?包含是/否2个选项。
#5、B4是单选题,题目为:平均每月网购消费金额大致是多少?包含13个选项。
#6、B5是多选题,题目为:网购支付方式有哪些?包含5个选项。
>summary(digitaldata[,c("ID","gender","age","edu","B3","B4")])#对单选题因子变量进行汇总,但是最多显示6个数据的详细信息,超过用other显示
ID gender age edu B3 B4
0019010926: 2 Min. :1.000 25-29岁:6239 高中-中专及以下: 4210 否: 9021 100-199元 :2597
0101264331: 2 1st Qu.:1.000 30-34岁:4872 大学专科 : 7241 是:15917 200-349元 :2566
0010018239: 1 Median :1.000 20-24岁:4458 大学本科 :11464 350-499元 :2288
0010417158: 1 Mean :1.311 35-39岁:3460 硕士及以上 : 2023 500-749元 :1946
0010822924: 1 3rd Qu.:2.000 40-44岁:2659 不清楚-难以回答:1464
0013747185: 1 Max. :7.000 45-49岁:1552 (Other) :5058
(Other) :24930 (Other):1698 NA's :9019
>sapply(digitaldata[,c("gender","age","edu","B3","B4")],table)#给出因子变量的具体频数统计
$gender
1 2 3 7
17197 7739 1 1
$age
10岁以下 10-14岁 15-19岁 20-24岁 25-29岁 30-34岁 35-39岁 40-44岁 45-49岁 50-54岁 55-59岁 60岁以上
0 0 418 4458 6239 4872 3460 2659 1552 545 396 339
$edu
高中-中专及以下 大学专科 大学本科 硕士及以上
4210 7241 11464 2023
$B3
否 是
9021 15917
$B4
100元以下 100-199元 200-349元 350-499元 500-749元 750-999元 1000-1199元
1431 2597 2566 2288 1946 992 1091
1200-1499元 1500-1999元 2000-2999元 3000-4999元 5000元及以上 不清楚-难以回答
352 421 453 187 131 1464
#结合summary和str函数解释:
#对ID的汇总显示有两个重复变量
#gender中除了1,2还有3和7这2个异常值,其含义表示缺失值,,需赋值处理
#age中14岁以下的人数为0,
>digitaldata$ID<-as.character(digitaldata$ID)
>digitaldata$gender<-factor(digitaldata$gender,levels = c(1,2),labels = c("男","女"))#转变为因子时,没有被水平的值自动转化为NA,从数据框表中看到性别里有2个异常值,3和7经转化后均变成NA了。
>digitaldata<-digitaldata[!duplicated(digitaldata$ID),]#duplicated()针对向量来查找的,可删除重复观测。
>digitaldata[duplicated(digitaldata$ID),]#结果表明ID无重复值了。
[1] ID gender age edu B1_1 B1_2 B1_3 B1_4 B1_5
[10] B1_6 B1_7 B1_8 B2_1 B2_2 B2_3 B3 B4 B5_1
[19] B5_2 B5_3 B5_4 B5_5
<0 行> (或0-长度的row.names)
>par(mfrow=c(1,1))
>library(VIM)
>aggr(digitaldata,prop=FALSE,numbers=TRUE)
#说明:
#age的两个异常值已转化为缺失值
#B3除是和否两个元素外,无缺失值
#B4和B5_1~B5_5均存在缺失值,表明B3有部分元素为否。
#删除性别缺失值的行
>digitaldata<-digitaldata[!is.na(digitaldata$gender),]
#B3为否时,B4和B5_1~B5_5应该都为空。
>table(digitaldata$B4,digitaldata$B3)
否 是
100元以下 0 1431
100-199元 0 2597
200-349元 1 2565
350-499元 0 2288
500-749元 1 1945
750-999元 0 992
1000-1199元 0 1091
1200-1499元 0 352
1500-1999元 0 421
2000-2999元 0 453
3000-4999元 0 187
5000元及以上 0 131
不清楚-难以回答 0 1464
>multi<-digitaldata[,c("ID","B3","B5_1","B5_2","B5_3","B5_4","B5_5")]
>head(multi)
ID B3 B5_1 B5_2 B5_3 B5_4 B5_5
1 0010018239 是 否 否 否 是 否
2 0010417158 是 是 否 否 否 否
3 0010822924 否 <NA> <NA> <NA> <NA> <NA>
4 0013747185 否 <NA> <NA> <NA> <NA> <NA>
5 0013941171 否 <NA> <NA> <NA> <NA> <NA>
6 0014517331 否 <NA> <NA> <NA> <NA> <NA>
>str(multi)
'data.frame': 24936 obs. of 7 variables:
$ ID : Factor w/ 24936 levels "0010018239","0010417158",..: 1 2 3 4 5 6 8 9 10 11 ...
$ B3 : Factor w/ 2 levels "否","是": 2 2 1 1 1 1 2 1 1 2 ...
$ B5_1: Factor w/ 2 levels "否","是": 1 2 NA NA NA NA 2 NA NA 1 ...
$ B5_2: Factor w/ 2 levels "否","是": 1 1 NA NA NA NA 1 NA NA 1 ...
$ B5_3: Factor w/ 2 levels "否","是": 1 1 NA NA NA NA 1 NA NA 1 ...
$ B5_4: Factor w/ 2 levels "否","是": 2 1 NA NA NA NA 1 NA NA 2 ...
$ B5_5: Factor w/ 2 levels "否","是": 1 1 NA NA NA NA 1 NA NA 1 ...
>library(reshape)
>multimelt<-melt(multi,id.vars=c("ID","B3"),measure.vars=c("B5_1","B5_2","B5_3","B5_4","B5_5"))
>head(multimelt,10)
ID B3 variable value
1 0010018239 是 B5_1 否
2 0010417158 是 B5_1 是
3 0010822924 否 B5_1 <NA>
4 0013747185 否 B5_1 <NA>
5 0013941171 否 B5_1 <NA>
6 0014517331 否 B5_1 <NA>
7 0019817323 是 B5_1 是
8 0021728957 否 B5_1 <NA>
9 0021876209 否 B5_1 <NA>
10 0023417676 是 B5_1 否
>multiagre<-cast(multimelt,variable+value~B3)
>multiagre[order(multiagre$value),]
B3 variable 否 是 NA
1 否 B5_1 1 0 9018
2 否 B5_2 0 2 9017
3 否 B5_3 1 0 9018
4 否 B5_4 0 1 9018
5 否 B5_5 1 0 9018
6 是 B5_1 5729 10188 0
7 是 B5_2 4420 11497 0
8 是 B5_3 11882 4035 0
9 是 B5_4 10644 5273 0
10 是 B5_5 15658 259 0
#删除逻辑错误观测值
>digitaldata<-digitaldata[!(digitaldata$B3=="否"&(!is.na(digitaldata$B4) |!is.na(digitaldata$B5_1) |!is.na(digitaldata$B5_2)| !is.na(digitaldata$B5_3)| !is.na(digitaldata$B5_4)|!is.na(digitaldata$B5_5))),]
#性别与网购经历以及网购支付方式的交叉表及独立性检验
>gender_B3<-table(digitaldata$B3,digitaldata$gender)
>chisq.test(gender_B3)
Pearson's Chi-squared test with Yates' continuity correction
data: gender_B3
X-squared = 536.4, df = 1, p-value < 2.2e-16
#网购支付方式是多选题,如何进行交叉表的独立性检验