4. 数据处理:判断数据类型、数据转换、取子集、【数据框】的各种操作、数据的中心化与标准化
admin
2024-05-09 18:57:23
0

b站课程视频链接:
https://www.bilibili.com/video/BV19x411X7C6?p=1
腾讯课堂(最新,但是要花钱,我花99😢😢元买了,感觉讲的没问题,就是知识点结构有点乱,有点废话):
https://ke.qq.com/course/3707827#term_id=103855009
 
本笔记前面的笔记参照b站视频,【后面的画图】参考了付费视频
笔记顺序做了些调整【个人感觉逻辑顺畅】,并删掉一些不重要的内容,以及补充了个人理解
系列笔记目录【持续更新】:https://blog.csdn.net/weixin_42214698/category_11393896.html

文章目录

  • 1. 判断数据类型(is.xxx)、数据转换(as.xxx)
  • 2.取子集
    • 2.1 索引方式
    • 2.2 subset函数
    • 2.3 sample函数
    • 2.4 删除固定行/列
  • 3.数据框
    • 3.1添加与合并 (增加行或列):data.frame、cbind、rbind
    • 3.2 行列翻转:t( ) + 序列前后翻转:rev( )
    • 3.3 修改数据框中的值:transform
    • 3.4 数据框的排序:sort、order、rank
    • 3.5 对数据框进行数学计算
    • 3.6 列与列之间进行调整
  • 4. 数据的中心化与标准化

1. 判断数据类型(is.xxx)、数据转换(as.xxx)

(1)关于数据框的转换

矩阵转换为数据框:  
dstate.x77 <- as.data.frame(state.x77)  
is.data.frame(dstate.x77)   返回TRUE数据框转换为矩阵:  
as.matrix(data.frame(state.region,state.x77))  
数据框中的数据类型不相同,转换为矩阵后,所有元素都变成字符串类型。注意:不是所有数据结构都能进行转换,比如有些数据框就不能转换为向量或者因子。

(2)关于向量的转换

向量转换为矩阵:  
x <- state.abb  
dim(x) <- c(5,10)向量转换为因子:  
as.factor(x)向量转换为列表:  
as.list(x)向量转换为数据框:  
data.frame(x,state.region,state.x77)

关于更多is和as的函数,可以使用methods(is)和methods(as)查看。



2.取子集

2.1 索引方式

#注意:第一行为列名,所以第二行才算是第一行
who <- read.csv("WHO.csv",header = T)# 1.取1~50行,1~10列 给who1
who1 <- who[c(1:50),c(1:10)]
# 2. 取1,3,5,8行,2,14,16,18列 给who2
who2 <- who[c(1,3,5,8),c(2,14,16,18)]# 3. 取“xxx”行,所有列给who3    “xxx”—— which(who$Continent==7)
who3 <- who[which(who$Continent==7),]# 4. 取“xxx”行,所有列给who4    “xxx”—— which(who$CountryID>50 & who$CountryID<=100)
who4 <- who[which(who$CountryID>50 & who$CountryID<=100),]

2.2 subset函数

?subset
# 和who4效果一样
who5 <- subset(who , who$CountryID>50 & who$CountryID<=100 )

2.3 sample函数

?sample
x <- 1:100
sample(x,30) # 默认是replace = F# 从向量x中,有放回的随机抽取30个元素
sample(x,30,replace = T)
# 从向量x中,不重样的随机抽取60个元素
sample(x,60,replace = F)
sort(sample(x,60,replace = T))#  取“xxx”行,所有列给who6    “xxx”—— sample(who$CountryID,30,replace = F)
who6 <- who[sample(who$CountryID,30,replace = F),]

2.4 删除固定行/列

mtcars[-1:-5 ,] #删除第1到5行  
mtcars[, -1:-5] #删除第1到5列mtcars$mpg <- NULL #清空mtcars中的mpg这一列



3.数据框

3.1添加与合并 (增加行或列):data.frame、cbind、rbind

(1)data.frame
data.frame(USArrests,state.division)(2)cbind列合并   这是列
cbind(USArrests,state.division)(3)rbind行合并   这是行
注:要求新的数据与原来的数据有相同的列名,否则rbind无法运行。  
data1 <- head(USArrests,30)  
data2 <- tail(USArrests,30)  
data3 <- rbind(data1,data2)若data1与data2之间有重复行,不会去除重复项,data2中的重复行的行名后会加字符1。
要想取非重复行,可以:  
data3[!duplicated(data3), ]  
或者  
unique(data3)

3.2 行列翻转:t( ) + 序列前后翻转:rev( )

行列翻转【就像矩阵转置】:mtcars1 <- t(mtcars)  > letters[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x"
[25] "y" "z"
> rev(letters)  # 顺序反转[1] "z" "y" "x" "w" "v" "u" "t" "s" "r" "q" "p" "o" "n" "m" "l" "k" "j" "i" "h" "g" "f" "e" "d" "c"
[25] "b" "a"
>
序列前后翻转:原本是1、2、3、4...n行的顺序    现在变成n 、(n-1)、....、3、2、1行的顺序
women <- women[rev(rownames(women)),]

3.3 修改数据框中的值:transform

data.frame(height=women$height*2.54,weight=women$weight)  这样操作不高效,可以使用transform函数:  
transform(women, height = height*2.54)   #将原height列乘以2.54  
transform(women, cm = height*2.54)  #增加一个cm列

3.4 数据框的排序:sort、order、rank

在R中,和排序相关的函数主要有三个:sort、order和rank函数。  (1)sort函数  
sort函数是对向量进行排序,返回值是排序后的结果向量。  
sort(state.name)  #从小到大
rev(sort(rivers)) #降序(2)order函数  
order函数也是对向量进行排序,但其返回值是:sort()排序后元素值【之前对应位置的索引】
order(rivers)  # 这行代码,是以行为单位
mtcars[order(mtcars$mpg),]  
mtcars[order(-mtcars$mpg),] #降序  #多条件排序,在符合mtcars$mpg排序的情况下,对mtcars$disp进行排序
mtcars[order(mtcars$mpg,mtcars$disp),](3)rank函数  
rank()函数返回值是:向量对应元素的排名。
具体参考:https://blog.csdn.net/AnneQiQi/article/details/60878551

3.5 对数据框进行数学计算

(1)  
# 转化成数据框
worldphones <- as.data.frame(WorldPhones) rs <- rowSums(worldphones) #计算行和  
cm <- colMeans(total) #计算每列平均数  total_c <- cbind(worldphones,Total=rs)         行合并
total_c_r <-rbind(total,Mean=cm)               列合并(2)  
apply(x,MARGIN,FUN)  
x是数组、矩阵或数据框;margin等于1代表行,等于2代表列;FUN代表要应用的函数。  
如:  
apply(WorldPhones,MARGIN=1,FUN = sum)  
apply(WorldPhones,MARGIN=2,FUN = mean)  
apply(WorldPhones,MARGIN=2,FUN = Var)  
apply(WorldPhones,MARGIN=2,FUN = log)(3)其他apply系列函数  
lapply(x,FUN):l代表list,x是列表,返回值是列表。  
sapply(x,FUN):s代表simplify,x是列表,返回值是向量或者矩阵。  
tapply(x,INDEX,FUN):x是向量或其他,INDEX是一组因子,利用这个因子,可以对第一个参数的数据进行分组。

3.6 列与列之间进行调整

将第6列~第10列 调整到原先的第15列之后x[, c(1:5 , 11:15 , 6:10 , 16:20)]



4. 数据的中心化与标准化

数据中心化:数据集中的各项数据 - 数据集的均值。
数据标准化:在中心化之后的数据 / 数据集的标准差

简单来看:  
x <- c(1,2,3,6,3)  
中心化:x-mean(x)  
标准化:(x-mean(x))/sd(x)R中实现数据中心化和标准化可以使用scale函数:  
scale(x,center,scale):center为TRUE就是做中心化处理,scale为TRUE就是做标准化处理。

相关内容

热门资讯

平安财险重庆分公司被罚92万,... 蓝鲸新闻2月12日讯,近日,国家金融监督管理总局重庆监管分局发布了罚单,剑指中国平安财产保险股份有限...
互联网大厂开启撒钱模式 央视网... 快科技2月12日消息,2026年开年,一场空前激烈的AI红包大战打响。 腾讯、阿里、字节、百度四大巨...
守护年夜饭消费安全 师市市场监... 2月10日,师市市场监督管理局聚焦辖区大型餐饮服务单位,全面开展“年夜饭”市场专项检查,以严密监管守...
和讯投顾钟凯锋:跨年无忧,主线... 今天科技复苏人气回升,还剩一个交易日,持股还是持币?大概率半仓持股没有问题。 前天视频已提示半仓持股...
原创 美... 最近国际能源圈闹得沸沸扬扬的事,就是美国那边对委内瑞拉石油政策的调整。话说回来,这事儿得从2026年...
这些“十字花科”蔬菜,真的要忌... 今天武医生统一回答:绝大多数甲状腺患者,不需要,也不应该彻底忌口十字花科蔬菜。 盲目忌口,反而因小失...
原创 中... 最近金融圈有个大动静,中国还在持续抛售美国国债,而且手笔不小。到去年11月,咱们手里的美债已经降到6...
银信科技(300231.SZ)... 来源:格隆汇APP 格隆汇2月12日丨银信科技(300231.SZ)公布,根据公司发展战略及业务需要...
安诚财险重庆分公司被罚81万,... 蓝鲸新闻2月13日讯,近日,国家金融监督管理总局重庆监管分局发布了罚单,剑指安诚财产保险股份有限公司...
白癜风专家李从悠:白癜风患者的... 饮食搭配是白癜风患者日常护理的重要组成部分,合理的饮食搭配能为黑色素合成提供充足原料,增强身体抵抗力...
东材科技大宗交易折价成交18.... 东材科技02月12日大宗交易平台共发生1笔成交,合计成交量18.58万股,成交金额501.10万元。...
“不要在这嚣张跋扈地讲半天”,... 每经记者|胥帅 每经编辑|文多 2月12日下午,公司股东会召开前夕,振芯科技(SZ300101)大...
深圳企业精选:2026年度展厅... 引言 随着经济的发展和市场竞争的加剧,企业展厅作为展示企业形象和产品的重要平台,其设计的重要性日益凸...
〔读城〕发展“春节经济”激活传... 文/李后强 中共四川省委四川省人民政府决策咨询委员会副主任、成都市社会科学界联合会主席、四川省社会科...
欧莱雅又续了一命 文丨牛刀财经 前哨 美妆行业彻底告别 “躺着赚钱” 的时代! 全球市场迈入存量博弈深水区,高增长红...
斥资135亿美元,美国资管巨头... 来源:21世纪经济报道 21世纪经济报道记者 余纪昕 2月12 日,据新浪财经等多家媒体报道,美国资...
2025,西贝、钟薛高、绝味…... 作者 | 蓝鲨消费 张二河 冰与火之歌 站在2026年的起点回望2025年,中国消费市场呈现出前所...
内蒙古锡林浩特市总工会推动互联... 中工网讯 2月9日,内蒙古自治区锡林浩特市总工会组织开展锡林浩特市互联网行业集体合同签订仪式。锡林浩...
1月美国非农超预期火爆,美联储... 美国劳工部最新公布的数据显示,1月全美就业增长意外加速。劳动力市场企稳的迹象,可能让美联储在一段时间...
市占率全球第一,钨矿大寡头,大... 厦门钨业,收购大动作! 2月9日,厦门钨业发布公告称,公司拟收购尚达信持有的九江大地39%股权,并支...