【数据挖掘】实验3:常用的数据管理

实验3:常用的数据管理

一:实验目的与要求

1:熟悉和掌握常用的数据管理方法,包括变量重命名、缺失值分析、数据排序、随机抽样、字符串处理、文本分词。

二:实验内容

【创建新变量】

方法1:

mydata <- iris[,1:2]

mydata$square <- mydata$Sepal.Length*mydata$Sepal.Width

方法2:

rm(list=ls())

mydata <- iris[,1:2]

attach(mydata)

mydata$square <- Sepal.Length*Sepal.Width

detach(mydata)

方法3:使用DT包(现在已经无法从CRAN下载)

rm(list=ls())

mydata <- iris[,1:2]

mydata <- transform(mydata,square=Sepal.Length*Sepal.Width)

library(DT)

datatable(mydata,rownames=F)

【变量重新编码】

Eg1:

rm(list = ls())

mydata <- mtcars

(mydata$am <- ifelse(mydata$am == 0,'automatic','manual'))

Eg2:将99岁这样的年龄重编码为缺失值

manager <- c(1,2,3,4,5)

date <- c('10/24/08','10/28/08','10/1/08','10/12/08','5/1/09')

country <- c('US','US','UK','UK','UK')

gender <- c('M','F','F','M','F')

age <- c(32,45,25,39,99)

q1 <- c(5,3,3,3,2)

q2 <- c(4,5,5,3,2)

q3 <- c(5,2,5,4,1)

q4 <- c(5,5,5,NA,2)

q5 <- c(5,5,2,NA,1)

leadership <- data.frame(manager,date,country,gender,age,q1,q2,q3,q4,q5, stringsAsFactors = FALSE)

leadership$age[leadership$age==99] <- NA

Eg3:将年龄离散化,将leadership中age(连续型变量)重新编码为类别型变量agecat

leadership$agecat[leadership$age > 66] <- "Elder"

leadership$agecat[leadership$age > 40 & leadership$age<66] <- "Middle Aged"

leadership$agecat[leadership$age >=18 & leadership$age<=40] <- "Young"

Eg4:同上,但使用within函数

leadership <- within(leadership, {agecat <- NA

  agecat[age > 75] <- 'Elder'

  agecat[age >-55 & age <=75] <- 'Middle Aged'

  agecat[age < 55] <- 'Young'})

【变量的重命名】

Eg1:

install.packages("reshape", repos = "http://cran.r-project.org")

w <- mtcars

library(reshape)

colnames(w)

w <- rename(w,c(mpg='Miles/(US) gallon',cy1='Number of Cylinders',disp='Displacement(cu.in)',hp='cross horsepower'))

colnames(w)

names(w)[5] <- 'Rear axle ratio'

names(w)

【数据排序】

Eg1:

x <- c(19, 84, 64, 2)

order(x)

rank(x)

sort(x)

【随机抽样】

Eg1:

install.packages("sampling",repos = "http://cran.r-project.org")

library(sampling)

LETTERS

(s<-srswor(10,26))

(obs<-((1:26)[s!=0]))

(sample<-LETTERS[obs])

Eg2:

library(sampling)

LETTERS

(s<-srswr(10,26))

(obs<-((1:26)[s!=0]))

(n<-s[s!=0])

(obs<-rep(obs,times=n))

(sample<-LETTERS[obs])

Eg3:

library(sampling)

LETTERS

sample(LETTERS,5,replace=TRUE)

sample(LETTERS,5,replace=FALSE)

Eg4:

library(sampling)

LETTERS

n<-sample(2,26,replace=T,prob=c(0.7,0.3))

n

(sample1 <- LETTERS[n==1])

(sample2 <- LETTERS[n==2])

【数学函数】

Eg1:

x <- c(1.12, -1.234, 3.1, 2.3, -4)

abs(x)

sqrt(25)

ceiling(x)

floor(x)

round(x,digits=1)

signif(x,digits=1)

【统计函数】

方法1:

mean(rivers)

median(rivers)

sd(rivers)

var(rivers)

quantile(rivers,c(.3,.84))

range(rivers)

min(rivers)

max(rivers)

【基本函数】

Eg1:鸢尾花数据集操作

head(iris)

colnames(iris)

names(iris)

sum(iris$Sepal.Length)

max(iris$Sepal.Length)

min(iris$Sepal.Length)

which.max(iris$Sepal.Length)

which.min(iris$Sepal.Length)

range(iris$Sepal.Length)

 

 

【高级函数】

Eg1:鸢尾花数据集操作

(x<-rnorm(1))

round(x,2)

index<-sample(1:150,30)

iris1<-iris$Sepal.Length[index]

sort(iris1)

order(iris1)

【概率函数】

Eg1:

data<-rnorm(20)

data

dnorm(data)

pnorm(data)

qnorm(0.9,mean=0,sd=1)

【字符串操作】

Eg1:字符串长度

data<-'R语言是一门艺术'

nchar(data)

Eg2:字符串合并

data1<-'用心去体会'

paste(data,data1,sep="")

 

Eg3:paste函数合并

paste("AB",1:5,sep="")

x<-list(a="1st",b="2nd",c="3rd")

y<-list(d=1,e=2)

paste(x,y,sep="-")

paste(x,y,sep="-",collapse=";")

paste(x,collapse=",")

Eg4:分割字符串

data<-c("2016年1月1日","2016年2月1日")

strsplit(data,"年")

strsplit(data,"年")[[1]][1]

Eg5:字符串替换

txt <- c("Whatever","is","worth","doing","is","worth","doing","well")

sub("[tr]","k",txt)

gsub("[tr]","k",txt)

Eg6:

(x<-'abadfa')

(substr(x,2,4))

substr(x,2,4)<-'kkk'

x

Eg7:

(x<-'abadfaf')

(x<-chartr('k','h',x))

(x<-chartr('faf','tBt',x))

(x<-chartr('faf','ttt',x))

(x<-chartr('af','Tt',x))

【jiebaR】

Eg1:(由于未找到data.txt文件,因此未对文件进行分词)

install.packages("jiebaR",repos = "http://cran.r-project.org")

library(jiebaR)

mixseg <- worker()

mpseg <- worker(type="mp")

hmmseg <- worker(type="hmm")

word = "人们都说桂林山水甲天下"

mixseg <= word

mpseg <= word

hmmseg <= word

segment(word,mixseg)

qseg <= word

qseg[word]

【apply家族】

Eg1:鸢尾花维度处理

apply(iris[,1:4],1,mean)

sapply(iris,mean)

lapply(iris[,1:4],mean)

Eg2:对列表x的每一个元素计算均值

x <- list(a=1:5,b=exp(0:3))

lapply(x,mean)

Eg3:计算矩阵x各行各列的均值

x<-matrix(1:20,ncol=4)

x

apply(x,1,mean)

apply(x,2,mean)

Eg4:列表list中的元素与数字1-3连接,并以矩阵和列表两种形式输出

list<-list(c("a","b","c"),c("A","B","C"))

list

sapply(list,paste,1:3,simplify=T)

sapply(list,paste,1:3,simplify=F)

【数据汇总统计】

Eg1:

attach(mtcars)

colnames(mtcars)

aggregate(mtcars[,c(1,3)],by=list(cyl,gear),FUN=mean)

【数据融合】

Eg1:melt函数融合数据框和数组

library(reshape)

head(airquality)

air_melt <- melt(airquality,id=c("Ozone","Month","Day"),na.rm=TRUE)

head(air_melt)

a <- array(c(1:11,NA),c(2,3,2))

a

a_melt <- melt(a,na.rm=TRUE,varnames=c("X","Y","Z"))

a_melt

【数据重塑】

Eg1:

install.packages("reshape2")

library(reshape2)

air_cast <- dcast(air_melt,Month~variable,fun.aggregate=mean)

air_cast

【粘贴数据结构】

Eg1:数据框加载

authors <- data.frame(

  surname=I(c('Tukey','venables','Tierney','Ripley','McNeil')),

  nationality=c('US','Australia','US',"UK",'Australia'),

  deceased=c('yes',rep('no',4))

)

books<-data.frame(

  name=I(c('Tukey','Venables','Tierney','Ripley','Ripley','McNeil','R core')),

  title=c('Exploratory Data Analysis',

          'Modern Applied statistics...',

          'LISP-STAT',

          'Spatial Statistics',

          'Stochastic Simulation',

          'Interactive Data Analysis',

          'An Introduction to R'),

  other.author = c(NA,'Ripley',NA,NA,NA,NA,'Venables & Smi')

)

Eg2:merge函数

(m1<-merge(authors,books,by.x='surname',by.y='name',all=F))

merge(authors,books,by.x='surname',by.y='name',all=T)

【转换函数】

Eg1:transform函数

head(airquality)

head(transform(airquality,Ozone=-Ozone))

head(transform(airquality,new=-Ozone))

【while循环语句】

Eg1:

pv <- c(1,1,2,3,1,1,15,7,18)

i<-1

result<-""

length(pv)

while(i<=length(pv)){

  if(pv[i]<=5){

    result[i] <- "初级用户"

  }else if(pv[i]<=15){

    result[i] <- "中级用户"

  }else{

    result[i] <- "高级用户"

  }

  i <- i+1

}

result

【for循环】

Eg1:不知道循环次数

pv <- c(1,1,2,3,1,1,15,7,18,1,1,2,3,1,1)

result<-""

m<-1

for(i in pv){

  if(i<=5){

    result[m]<-"初级用户";

  }else if(i<=15){

    result[m]<-"中级用户";

  }else{

    result[m]<-"高级用户";

  }

  m<-m+1

}

result

Eg2:知道循环次数

pv <- c(1,1,2,3,1,1,15,7,18,1,1,2,3,1,1)

result<-""

for(i in 1:length(pv)){

  if(pv[i]<=5){

    result[i]<-"初级用户";

  }else if(pv[i]<=15){

    result[i]<-"中级用户";

  }else{

    result[i]<-"高级用户";

  }

}

result

【repeat-break循环】

Eg1:

pv <- c(1,1,2,3,1,1,15,7,18)

i<-1

result<-""

repeat{

  if(i>length(pv)){

    break

  }

  if(pv[i]<=5){

    result[i]<-"初级用户"

  }else if(pv[i]<=15){

    result[i]<-"中级用户"

  }else{

    result[i]<-"高级用户"

  }

  i<-i+1

}

result

【自定义函数】

Eg1:自定义一个求两数之和的函数

s <- function(x,y){

  a<-x+y

  return(a)

}

s(2,3)

三:课堂练习

【练习1】PPT-05第27页

案例1:

scale(cars,center=T,scale=F) # centrialize

scale(cars,center=T,scale=T) # standarlize

diff(cars[,1]) # differentiate

案例2:

date <- c("2016-01-27","2016-02-27")

difftime(date[2],date[1],units="days")

difftime(date[2],date[1],units="weeks")

【练习2】PPT-05第27页

案例1:subset函数选定特定行或子集

subset(airquality, Temp > 80, select = c(Ozone, Temp))

案例2:

subset(airquality, Day == 1, select=-Temp)

案例3:

subset(airquality, select = Ozone:Wind)

详细结果如下表所示

    Ozone Solar.R Wind

1      41     190  7.4

2      36     118  8.0

3      12     149 12.6

4      18     313 11.5

5      NA      NA 14.3

6      28      NA 14.9

7      23     299  8.6

8      19      99 13.8

9       8      19 20.1

10     NA     194  8.6

11      7      NA  6.9

12     16     256  9.7

13     11     290  9.2

14     14     274 10.9

15     18      65 13.2

16     14     334 11.5

17     34     307 12.0

18      6      78 18.4

19     30     322 11.5

20     11      44  9.7

21      1       8  9.7

22     11     320 16.6

23      4      25  9.7

24     32      92 12.0

25     NA      66 16.6

26     NA     266 14.9

27     NA      NA  8.0

28     23      13 12.0

29     45     252 14.9

30    115     223  5.7

31     37     279  7.4

32     NA     286  8.6

33     NA     287  9.7

34     NA     242 16.1

35     NA     186  9.2

36     NA     220  8.6

37     NA     264 14.3

38     29     127  9.7

39     NA     273  6.9

40     71     291 13.8

41     39     323 11.5

42     NA     259 10.9

43     NA     250  9.2

44     23     148  8.0

45     NA     332 13.8

46     NA     322 11.5

47     21     191 14.9

48     37     284 20.7

49     20      37  9.2

50     12     120 11.5

51     13     137 10.3

52     NA     150  6.3

53     NA      59  1.7

54     NA      91  4.6

55     NA     250  6.3

56     NA     135  8.0

57     NA     127  8.0

58     NA      47 10.3

59     NA      98 11.5

60     NA      31 14.9

61     NA     138  8.0

62    135     269  4.1

63     49     248  9.2

64     32     236  9.2

65     NA     101 10.9

66     64     175  4.6

67     40     314 10.9

68     77     276  5.1

69     97     267  6.3

70     97     272  5.7

71     85     175  7.4

72     NA     139  8.6

73     10     264 14.3

74     27     175 14.9

75     NA     291 14.9

76      7      48 14.3

77     48     260  6.9

78     35     274 10.3

79     61     285  6.3

80     79     187  5.1

81     63     220 11.5

82     16       7  6.9

83     NA     258  9.7

84     NA     295 11.5

85     80     294  8.6

86    108     223  8.0

87     20      81  8.6

88     52      82 12.0

89     82     213  7.4

90     50     275  7.4

91     64     253  7.4

92     59     254  9.2

93     39      83  6.9

94      9      24 13.8

95     16      77  7.4

96     78      NA  6.9

97     35      NA  7.4

98     66      NA  4.6

99    122     255  4.0

100    89     229 10.3

101   110     207  8.0

102    NA     222  8.6

103    NA     137 11.5

104    44     192 11.5

105    28     273 11.5

106    65     157  9.7

107    NA      64 11.5

108    22      71 10.3

109    59      51  6.3

110    23     115  7.4

111    31     244 10.9

112    44     190 10.3

113    21     259 15.5

114     9      36 14.3

115    NA     255 12.6

116    45     212  9.7

117   168     238  3.4

118    73     215  8.0

119    NA     153  5.7

120    76     203  9.7

121   118     225  2.3

122    84     237  6.3

123    85     188  6.3

124    96     167  6.9

125    78     197  5.1

126    73     183  2.8

127    91     189  4.6

128    47      95  7.4

129    32      92 15.5

130    20     252 10.9

131    23     220 10.3

132    21     230 10.9

133    24     259  9.7

134    44     236 14.9

135    21     259 15.5

136    28     238  6.3

137     9      24 10.9

138    13     112 11.5

139    46     237  6.9

140    18     224 13.8

141    13      27 10.3

142    24     238 10.3

143    16     201  8.0

144    13     238 12.6

145    23      14  9.2

146    36     139 10.3

147     7      49 10.3

148    14      20 16.6

149    30     193  6.9

150    NA     145 13.2

151    14     191 14.3

152    18     131  8.0

153    20     223 11.5

【练习3】PPT-05第37页

案例1:求给定向量中的偶数个数

Num <- function(x){

  k=0

  stopifnot(is.numeric(x))

  for(i in x){

    if(i %% 2==0){

      k=k+1

    }

  }

  return(k)

}

Num(1:9)

【练习4】PPT-05第39页

案例1:自编函数计算标准差代码

BZC <- function(x){

  stopifnot(is.numeric(x))

  stopifnot(length(x)>1)

  avg<-mean(x)

  sum=0

  for(i in x){

    sum=sum+(i-avg)**2

  }

  return(sqrt(sum/length(x)))

}

BZC(c(1:5))

函数设计流程:

四:实验知识点总结

0:PPT-05上第29页中【na.rm=FALSE】的作用是——保留数据集中的缺失值,并尝试计算包含这些缺失值的统计量。当na.rm=TRUE时,函数会在计算统计量之前从数据集中删除所有的缺失值。

1:在变量的重命名中,rename函数可修改数据库和列表(不改变原数据集中的变量名),不能修改矩阵;names函数可修改数据库和列表(改变原数据集中的变量名),不能修改矩阵;colnames函数和rownames函数可修改矩阵和数据库的行名和列名。


2:数据排序函数的区别。

3:随机抽样函数的区别。

4:常用的数学函数。

5:常用的统计函数。

6:常用的高级数学函数。

 7:apply家族的使用方法。

8:函数体的组成部分。

五:遇到的问题和解决方法

问题&解决1:reshape2和reshape不是一个依赖包,只载入reshape包而不载入reshape2包,无法调用reshape2中的封装功能。因此,需要看清楚封装功能所来源的依赖包是哪一个,再进行调用。

问题&解决2:如果当前使用的镜像源太卡,会导致install.packages()失败。此时需要使用【chooseCRANmirror()】,并选择新的镜像源,然后再进行依赖包的安装和载入。或者通过例如【options(repos = c(CRAN = "https://cloud.r-project.org/"))】的方式更换。

问题&解决3:PPT中的思考题通过以下网页进行学习。

R语言数据框中的缺失值_na.rm=true什么意思-CSDN博客

https://www.cnblogs.com/chenwenyan/p/16384901.html

  • 37
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MorleyOlsen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值