01数据与R 2018-12-16
1.3.3 数据使用与编辑
1. 数据排序
> dat=read.csv("table1_1.csv")
> dat
学生姓名 统计学 数学 营销学 管理学 会计学
1 张青松 68 85 84 89 86
2 王宇翔 85 91 63 76 66
3 田思雨 74 74 61 80 69
4 徐丽娜 88 100 49 71 66
5 张志杰 63 82 89 78 80
6 赵颖颖 78 84 51 60 60
7 王智强 90 78 59 72 66
8 宋丽媛 80 100 53 73 70
9 袁芳芳 58 51 79 91 85
10 张建国 63 70 91 85 82
> dat[order(dat$统计学),]
学生姓名 统计学 数学 营销学 管理学 会计学
9 袁芳芳 58 51 79 91 85
5 张志杰 63 82 89 78 80
10 张建国 63 70 91 85 82
1 张青松 68 85 84 89 86
3 田思雨 74 74 61 80 69
6 赵颖颖 78 84 51 60 60
8 宋丽媛 80 100 53 73 70
2 王宇翔 85 91 63 76 66
4 徐丽娜 88 100 49 71 66
7 王智强 90 78 59 72 66
> save(dat, file="dat01.rda")
> dat[order(dat$统计学,decreasing=T),]
学生姓名 统计学 数学 营销学 管理学 会计学
7 王智强 90 78 59 72 66
4 徐丽娜 88 100 49 71 66
2 王宇翔 85 91 63 76 66
8 宋丽媛 80 100 53 73 70
6 赵颖颖 78 84 51 60 60
3 田思雨 74 74 61 80 69
1 张青松 68 85 84 89 86
5 张志杰 63 82 89 78 80
10 张建国 63 70 91 85 82
9 袁芳芳 58 51 79 91 85
> sort(dat$统计学,decreasing=T)
[1] 90 88 85 80 78 74 68 63 63 58
> ?order
> order(dat$统计学,decreasing=T)
[1] 7 4 2 8 6 3 1 5 10 9
2. 选择特定的变量进行分析
> rbind(dat, totals=colSums(dat[,2:6]))
学生姓名 统计学 数学 营销学 管理学 会计学
1 张青松 68 85 84 89 86
2 王宇翔 85 91 63 76 66
3 田思雨 74 74 61 80 69
4 徐丽娜 88 100 49 71 66
5 张志杰 63 82 89 78 80
6 赵颖颖 78 84 51 60 60
7 王智强 90 78 59 72 66
8 宋丽媛 80 100 53 73 70
9 袁芳芳 58 51 79 91 85
10 张建国 63 70 91 85 82
11 <NA> 815 679 775 730 747
Warning message:
In `[<-.factor`(`*tmp*`, ri, value = 747) :
invalid factor level, NA generated
> colSums(dat[,2:6])
统计学 数学 营销学 管理学 会计学
747 815 679 775 730
> class(dat)
[1] "data.frame"
> totals
Error: object 'totals' not found
> totals=colSums(dat[,2:6])
> totals
统计学 数学 营销学 管理学 会计学
747 815 679 775 730
> rbind(dat, totals)
学生姓名 统计学 数学 营销学 管理学 会计学
1 张青松 68 85 84 89 86
2 王宇翔 85 91 63 76 66
3 田思雨 74 74 61 80 69
4 徐丽娜 88 100 49 71 66
5 张志杰 63 82 89 78 80
6 赵颖颖 78 84 51 60 60
7 王智强 90 78 59 72 66
8 宋丽媛 80 100 53 73 70
9 袁芳芳 58 51 79 91 85
10 张建国 63 70 91 85 82
11 <NA> 815 679 775 730 747
Warning message:
In `[<-.factor`(`*tmp*`, ri, value = 747) :
invalid factor level, NA generated
##由数据框转变为矩阵:
> new_dat<-dat
> rownames(new_dat)<-dat[,1]
> new_dat
学生姓名 统计学 数学 营销学 管理学 会计学
张青松 张青松 68 85 84 89 86
王宇翔 王宇翔 85 91 63 76 66
田思雨 田思雨 74 74 61 80 69
徐丽娜 徐丽娜 88 100 49 71 66
张志杰 张志杰 63 82 89 78 80
赵颖颖 赵颖颖 78 84 51 60 60
王智强 王智强 90 78 59 72 66
宋丽媛 宋丽媛 80 100 53 73 70
袁芳芳 袁芳芳 58 51 79 91 85
张建国 张建国 63 70 91 85 82
> new_dat<-new_dat[,-1]
> new_dat
统计学 数学 营销学 管理学 会计学
张青松 68 85 84 89 86
王宇翔 85 91 63 76 66
田思雨 74 74 61 80 69
徐丽娜 88 100 49 71 66
张志杰 63 82 89 78 80
赵颖颖 78 84 51 60 60
王智强 90 78 59 72 66
宋丽媛 80 100 53 73 70
袁芳芳 58 51 79 91 85
张建国 63 70 91 85 82
> rbind(new_dat, colSums(new_dat[,1:5]))
统计学 数学 营销学 管理学 会计学
张青松 68 85 84 89 86
王宇翔 85 91 63 76 66
田思雨 74 74 61 80 69
徐丽娜 88 100 49 71 66
张志杰 63 82 89 78 80
赵颖颖 78 84 51 60 60
王智强 90 78 59 72 66
宋丽媛 80 100 53 73 70
袁芳芳 58 51 79 91 85
张建国 63 70 91 85 82
11 747 815 679 775 730
> rbind(new_dat, totals=colSums(new_dat[,1:5]))
统计学 数学 营销学 管理学 会计学
张青松 68 85 84 89 86
王宇翔 85 91 63 76 66
田思雨 74 74 61 80 69
徐丽娜 88 100 49 71 66
张志杰 63 82 89 78 80
赵颖颖 78 84 51 60 60
王智强 90 78 59 72 66
宋丽媛 80 100 53 73 70
袁芳芳 58 51 79 91 85
张建国 63 70 91 85 82
totals 747 815 679 775 730
> apply(new_dat, 1, sum)
张青松 王宇翔 田思雨 徐丽娜 张志杰 赵颖颖 王智强 宋丽媛 袁芳芳 张建国
412 381 358 374 392 333 365 376 364 391
> apply(new_dat, 2, sum)
统计学 数学 营销学 管理学 会计学
747 815 679 775 730
> apply(new_dat, 1, mean)
张青松 王宇翔 田思雨 徐丽娜 张志杰 赵颖颖 王智强 宋丽媛 袁芳芳 张建国
82.4 76.2 71.6 74.8 78.4 66.6 73.0 75.2 72.8 78.2
> apply(new_dat, 2, mean)
统计学 数学 营销学 管理学 会计学
74.7 81.5 67.9 77.5 73.0
> apply(new_dat, 2, sd)
统计学 数学 营销学 管理学 会计学
11.324016 14.623041 16.251154 9.300538 9.333333
> apply(new_dat, 1, sd)
张青松 王宇翔 田思雨 徐丽娜 张志杰 赵颖颖 王智强 宋丽媛
8.264381 11.987493 7.092249 19.791412 9.555103 13.813037 11.832160 17.049927
袁芳芳 张建国
17.412639 11.432410
> apply(dat, 1,mean)
[1] NA NA NA NA NA NA NA NA NA NA
Warning messages:
1: In mean.default(newX[, i], ...) :
argument is not numeric or logical: returning NA
2: In mean.default(newX[, i], ...) :
argument is not numeric or logical: returning NA
3: In mean.default(newX[, i], ...) :
argument is not numeric or logical: returning NA
4: In mean.default(newX[, i], ...) :
argument is not numeric or logical: returning NA
5: In mean.default(newX[, i], ...) :
argument is not numeric or logical: returning NA
6: In mean.default(newX[, i], ...) :
argument is not numeric or logical: returning NA
7: In mean.default(newX[, i], ...) :
argument is not numeric or logical: returning NA
8: In mean.default(newX[, i], ...) :
argument is not numeric or logical: returning NA
9: In mean.default(newX[, i], ...) :
argument is not numeric or logical: returning NA
10: In mean.default(newX[, i], ...) :
argument is not numeric or logical: returning NA
> apply(dat[,2:6], 1,mean)
[1] 82.4 76.2 71.6 74.8 78.4 66.6 73.0 75.2 72.8 78.2
> apply(dat[,-1,2:6], 1,mean)
[1] 82.4 76.2 71.6 74.8 78.4 66.6 73.0 75.2 72.8 78.2
> apply(dat[,-1], 1,mean)
[1] 82.4 76.2 71.6 74.8 78.4 66.6 73.0 75.2 72.8 78.2
3. 编辑数据框
> edit(dat)
学生姓名 统计学 数学 营销学 管理学 会计学
1 张青松 68 85 84 89 86
2 王宇翔 85 91 63 76 66
3 田思雨 74 74 61 80 69
4 徐丽娜 88 100 49 71 66
5 张志杰 63 82 89 78 80
6 赵颖颖 78 84 51 60 60
7 王智强 90 78 59 72 66
8 宋丽媛 80 100 53 73 70
9 袁芳芳 58 51 79 91 85
10 张建国 63 70 91 85 82
> x=edit(dat)
> x
学生姓名 统计学 数学 营销学 管理学 会计学
1 张青松 68 85 84 89 86
2 王宇翔 85 91 63 76 66
3 田思雨 74 74 61 80 69
4 徐丽娜 88 100 49 71 66
5 张志杰 63 82 89 78 80
6 赵颖颖 78 84 51 60 60
7 王智强 90 78 59 72 66
8 宋丽媛 80 100 53 73 70
9 袁芳芳 58 51 79 91 85
10 张建国 63 70 91 85 82
> library(reshape)
> rename(dat, c(学生姓名="姓名", 统计学="统计"))
姓名 统计 数学 营销学 管理学 会计学
1 张青松 68 85 84 89 86
2 王宇翔 85 91 63 76 66
3 田思雨 74 74 61 80 69
4 徐丽娜 88 100 49 71 66
5 张志杰 63 82 89 78 80
6 赵颖颖 78 84 51 60 60
7 王智强 90 78 59 72 66
8 宋丽媛 80 100 53 73 70
9 袁芳芳 58 51 79 91 85
10 张建国 63 70 91 85 82
4. 缺失值的处理
> dat2<-read.csv("table1_1_2.csv")
> save(dat2, file="dat2.rda")
> dat2<-read.csv("table1_1_2.csv")
> dat2
学生姓名 统计学 数学 营销学 管理学 会计学
1 张青松 68 85 84 89 86
2 王宇翔 85 91 63 76 66
3 田思雨 74 74 61 80 69
4 徐丽娜 88 100 49 NA NA
5 张志杰 63 82 89 NA NA
6 赵颖颖 78 84 51 60 60
7 王智强 90 78 59 72 66
8 宋丽媛 80 100 53 73 70
9 袁芳芳 58 51 79 91 85
10 张建国 63 70 91 85 82
> sum(dat2,na.rm=T)
Error in FUN(X[[i]], ...) :
only defined on a data frame with all numeric variables
> sum(dat2[,2:6],na.rm=T)
[1] 3451
> mean(dat2[,2:6],na.rm=T)
[1] NA
Warning message:
In mean.default(dat2[, 2:6], na.rm = T) :
argument is not numeric or logical: returning NA
> dat2
学生姓名 统计学 数学 营销学 管理学 会计学
1 张青松 68 85 84 89 86
2 王宇翔 85 91 63 76 66
3 田思雨 74 74 61 80 69
4 徐丽娜 88 100 49 NA NA
5 张志杰 63 82 89 NA NA
6 赵颖颖 78 84 51 60 60
7 王智强 90 78 59 72 66
8 宋丽媛 80 100 53 73 70
9 袁芳芳 58 51 79 91 85
10 张建国 63 70 91 85 82
> na.omit(dat2)
学生姓名 统计学 数学 营销学 管理学 会计学
1 张青松 68 85 84 89 86
2 王宇翔 85 91 63 76 66
3 田思雨 74 74 61 80 69
6 赵颖颖 78 84 51 60 60
7 王智强 90 78 59 72 66
8 宋丽媛 80 100 53 73 70
9 袁芳芳 58 51 79 91 85
10 张建国 63 70 91 85 82
> na.rm(dat2)
Error in na.rm(dat2) : could not find function "na.rm"
> na.(dat2)
na.action na.exclude na.omit
na.contiguous na.fail na.pass
> na.exclude(dat2)
学生姓名 统计学 数学 营销学 管理学 会计学
1 张青松 68 85 84 89 86
2 王宇翔 85 91 63 76 66
3 田思雨 74 74 61 80 69
6 赵颖颖 78 84 51 60 60
7 王智强 90 78 59 72 66
8 宋丽媛 80 100 53 73 70
9 袁芳芳 58 51 79 91 85
10 张建国 63 70 91 85 82
1.3.4 数据类型的转换
> as.matrix(dat[,2:6])
统计学 数学 营销学 管理学 会计学
[1,] 68 85 84 89 86
[2,] 85 91 63 76 66
[3,] 74 74 61 80 69
[4,] 88 100 49 71 66
[5,] 63 82 89 78 80
[6,] 78 84 51 60 60
[7,] 90 78 59 72 66
[8,] 80 100 53 73 70
[9,] 58 51 79 91 85
[10,] 63 70 91 85 82
> as.matrix(dat)
学生姓名 统计学 数学 营销学 管理学 会计学
[1,] "张青松" "68" " 85" "84" "89" "86"
[2,] "王宇翔" "85" " 91" "63" "76" "66"
[3,] "田思雨" "74" " 74" "61" "80" "69"
[4,] "徐丽娜" "88" "100" "49" "71" "66"
[5,] "张志杰" "63" " 82" "89" "78" "80"
[6,] "赵颖颖" "78" " 84" "51" "60" "60"
[7,] "王智强" "90" " 78" "59" "72" "66"
[8,] "宋丽媛" "80" "100" "53" "73" "70"
[9,] "袁芳芳" "58" " 51" "79" "91" "85"
[10,] "张建国" "63" " 70" "91" "85" "82"
> as.data.frame(as.matrix(dat))
学生姓名 统计学 数学 营销学 管理学 会计学
1 张青松 68 85 84 89 86
2 王宇翔 85 91 63 76 66
3 田思雨 74 74 61 80 69
4 徐丽娜 88 100 49 71 66
5 张志杰 63 82 89 78 80
6 赵颖颖 78 84 51 60 60
7 王智强 90 78 59 72 66
8 宋丽媛 80 100 53 73 70
9 袁芳芳 58 51 79 91 85
10 张建国 63 70 91 85 82
> matrix.1=as.matrix(dat[,2:6])
> rownames(matrix.1)=dat[,1]
> matrix.1
统计学 数学 营销学 管理学 会计学
张青松 68 85 84 89 86
王宇翔 85 91 63 76 66
田思雨 74 74 61 80 69
徐丽娜 88 100 49 71 66
张志杰 63 82 89 78 80
赵颖颖 78 84 51 60 60
王智强 90 78 59 72 66
宋丽媛 80 100 53 73 70
袁芳芳 58 51 79 91 85
张建国 63 70 91 85 82
> save(matrix.1, file="matrix.1.rda")
> class(dat$统计学)
[1] "integer"
> class(as.vector(dat$统计学))
[1] "integer"
> as.vector(as.matrix(dat[,2:6]))
[1] 68 85 74 88 63 78 90 80 58 63 85 91 74 100 82 84 78 100 51
[20] 70 84 63 61 49 89 51 59 53 79 91 89 76 80 71 78 60 72 73
[39] 91 85 86 66 69 66 80 60 66 70 85 82
1.3.5 生成随机数