R 语言实战---04--数据处理

数据整理

无论是输入外部数据还是R本身写入的数据,斗殴要经过处理才能使我们更好的分析。在我们做诗句处理前,先了解一下R中的算术运算符和逻辑运算符。

算术运算符:就是加减乘除类的符号。
逻辑运算符:表示判断的符号。

1. 算术运算符如下:

在这里插入图片描述

2.逻辑运算符如下:

在这里插入图片描述

一. 数据表的修改

首先我们定义一组数据:

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
str(leadership)

数据的增删改查
# 数据框添加新列和删除新列
leadership$sum = leadership$q1+leadership$q2+leadership$q3+leadership$q4+leadership$q5  # 方法一
leadership = transform(leadership, sumx  =  q1 + q2, meanx = (q1 + q2)/2)   # 方法二
# 根据逻辑判断来添加新列
leadership$age_class[leadership$age > 75] = "elder"
leadership$age_class[leadership$age >= 55 & leadership$age <= 75] = "middle aged"
leadership$age_class[leadership$age < 55] = "young"

# 删除某一列或者行
leadership = leadership[-5,]   # 删除第五行
leadership = leadership[,-1]   # 删除第一列
leadership = leadership[-c(1:3),]  # 可以删除多行


# 修改数据框中的值
leadership$q1 = c(1,2,3,4,5)   # 修改整列的值
leadership$q1[1] = 10          # 修改表中的元素
leadership$age[ leadership$age >= 80 ] = NA   # 根据逻辑判断来修改数据框中的值

# with 和 within 很相似,但是within允许修改数据框,而with是不允许修改内容的
leadership = within(leadership,{ 
  agecat = NA  
  agecat[age > 75]              = "Elder" 
  agecat[age >= 55 & age <= 75] = "Middle Aged" 
  agecat[age < 55]              = "Young" })

# 修改数据框中的行和列的名字(也可以使用plyr包中的rename()函数)
fix(leadership)   # 直接在R编辑器中修改
names(leadership)[1] = "haha"  # 通过names() 函数修改列名
names(leadership)[1:3] = c("ni","wo","you")
rownames(leadership)[1] = "hahha"  # 修改行的名字



# 缺失值的处理
is.infinite()        # 判断是否为无穷
is.nan()             # 判断是不是数字
is.na(leadership)    # 判断是否为缺失值

# 与缺失值的计算最后都是缺失值
x = c(1,2,NA,4)
y = x[1]+x[2]+x[3]
z = sum(x)
w = sum(x,na.rm = TRUE) # 对缺失值的处理

# na.omit() 删除具有缺失值的行
newdata = na.omit(leadership)

日期的处理

有时候我们再处理数据的时候,要注意日期的格式也会对数据分析造成影响。
下面是日期的格式:
在这里插入图片描述

# 日期值的处理  as.Date(x, "input_format"),其中x是字符型数据,input_format则给出了用于读入日期的适当格式

strDates <- c("01/05/1965", "08/16/1975") 
dates <- as.Date(strDates, "%m/%d/%Y")
leadership$date = as.Date(leadership$date,"%m/%d/%Y")

# 获得当前日期
Sys.Date()   
date()

# 格式化输出日期
today = Sys.Date() 
format(today, format="%b/%d/%Y")
format(today, format="%b/%d--------%Y") 
format(today, format="%A") 

数据类型判断以及转换

在处理数据的时候,常常需要转换数据,因为非数值型数据是不能运算的。接下来我们就介绍数据类型判断以及数据的转换。
在这里插入图片描述

# 这里很简单,就简单介绍
a = c(1,2,3)
typeof(a)         #  打印出数据的类型
is.numeric(a)     # 判断是否为数值型
a = as.character(a)  # 转换为字符
is.numeric(a)

数据排序 order()

# 数据排序
# 以gender进行排序,然后再gender中又以年龄从小到大排序
leadership_new = leadership[order(leadership$gender,leadership$age),]
# 前面加个负号就是从大到小排序
# 先将leadership以gender进来排序, gender内部再以age进行排序
leadership_new = leadership[order(leadership$gender,-leadership$age),]

示例

# 数据实战
# 1. 挑选出年龄30岁以上的男性的行
# 2. 挑选出2009年1月1日到2009年12月31日之间的行

data_1 = leadership[leadership$gender == "M" 
                    & leadership$age >30,]

#  日期一定要格式化之后才能比较
leadership$date = as.Date(leadership$date,"%m/%d/%y")
startdate = as.Date("2009-01-01")
enddate = as.Date("2009-10-31")
data_2 = leadership[leadership$date >startdate & leadership$date < enddate,]

在数据中常用的两个函数

# 子集的挑选subset(数据集,条件,select = 要展示的数据)函数
# 选中airquality中的temp大于70的对应的Ozone, Temp的值
v = airquality
c = subset(v, Temp > 70, select = c(Ozone, Temp))

# 抽样sample()
# 从airquality中随机抽取5行数据,不重复
sample_1 = airquality[sample(1:nrow(airquality),5,replace = FALSE),]
# 从airquality中随机抽取3列数据,不重复
sample_2 = airquality[,sample(1:ncol(airquality),3,replace = FALSE)]

代码(附)

所有代码如下:

getwd()
setwd("D:/D/my_files/r/r语言实战")

# 数据管理
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$sum = leadership$q1+leadership$q2+leadership$q3+leadership$q4+leadership$q5  # 方法一
leadership = transform(leadership, sumx  =  q1 + q2, meanx = (q1 + q2)/2)   # 方法二
# 根据逻辑判断来添加新列
leadership$age_class[leadership$age > 75] = "elder"
leadership$age_class[leadership$age >= 55 & leadership$age <= 75] = "middle aged"
leadership$age_class[leadership$age < 55] = "young"

# 删除某一列或者行
leadership = leadership[-5,]   # 删除第五行
leadership = leadership[,-1]   # 删除第一列
leadership = leadership[-c(1:3),]  # 可以删除多行
leadership$manager = NULL       # 删除manager这一列

# 取数据集的子集,其实也就是删除某些列
qq = names(leadership) %in% c("q1","q2")
leadership = leadership[!qq]



# 修改数据框中的值
leadership$q1 = c(1,2,3,4,5)   # 修改整列的值
leadership$q1[1] = 10          # 修改表中的元素
leadership$age[ leadership$age >= 80 ] = NA   # 根据逻辑判断来修改数据框中的值

# with 和 within 很相似,但是within允许修改数据框,而with是不允许修改内容的
leadership = within(leadership,{ 
  agecat = NA  
  agecat[age > 75]              = "Elder" 
  agecat[age >= 55 & age <= 75] = "Middle Aged" 
  agecat[age < 55]              = "Young" })

# 修改数据框中的行和列的名字(也可以使用plyr包中的rename()函数)
fix(leadership)   # 直接在R编辑器中修改
names(leadership)[1] = "haha"  # 通过names() 函数修改列名
names(leadership)[1:3] = c("ni","wo","you")
rownames(leadership)[1] = "hahha"  # 修改行的名字



# 缺失值的处理
is.infinite()        # 判断是否为无穷
is.nan()             # 判断是不是数字
is.na(leadership)    # 判断是否为缺失值

# 与缺失值的计算最后都是缺失值
x = c(1,2,NA,4)
y = x[1]+x[2]+x[3]
z = sum(x)
w = sum(x,na.rm = TRUE) # 对缺失值的处理

# na.omit() 删除具有缺失值的行
newdata = na.omit(leadership)
leadership
str(leadership)




# 日期值的处理  as.Date(x, "input_format"),其中x是字符型数据,input_format则给出了用于读入日期的适当格式

strDates <- c("01/05/1965", "08/16/1975") 
dates <- as.Date(strDates, "%m/%d/%Y")
leadership$date = as.Date(leadership$date,"%m/%d/%Y")

# 获得当前日期
Sys.Date()   
date()

# 格式化输出日期
today = Sys.Date() 
format(today, format="%b/%d/%Y")
format(today, format="%b/%d--------%Y") 
format(today, format="%A") 


#  数据类型判断和转换

a = c(1,2,3)
typeof(a)         #  打印出数据的类型
is.numeric(a)     # 判断是否为数值型
a = as.character(a)  # 转换为字符
is.numeric(a)
a


# 数据排序
# 以gender进行排序,然后再gender中又以年龄从小到大排序
leadership_new = leadership[order(leadership$gender,leadership$age),]
# 前面加个负号就是从大到小排序
leadership_new = leadership[order(leadership$gender,-leadership$age),]


# 数据集的合并
merge()   
cbind()  # 按照列合并数据
rbind()  # 按照行合并数据



# 数据实战
# 1. 挑选出年龄30岁以上的男性的行
# 2. 挑选出2009年1月1日到2009年12月31日之间的行

data_1 = leadership[leadership$gender == "M" 
                    & leadership$age >30,]

#  日期一定要格式化之后才能比较
leadership$date = as.Date(leadership$date,"%m/%d/%y")
startdate = as.Date("2009-01-01")
enddate = as.Date("2009-10-31")
data_2 = leadership[leadership$date >startdate & leadership$date < enddate,]




# 子集的挑选subset(数据集,条件,select = 要展示的数据)函数
# 选中airquality中的temp大于70的对应的Ozone, Temp的值
v = airquality
c = subset(v, Temp > 70, select = c(Ozone, Temp))

# 抽样sample()
# 从airquality中随机抽取5行数据,不重复
sample_1 = airquality[sample(1:nrow(airquality),5,replace = FALSE),]
# 从airquality中随机抽取3列数据,不重复
sample_2 = airquality[,sample(1:ncol(airquality),3,replace = FALSE)]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大气污染已经成为全球环境问题的突出因素之一,其影响不仅限于空气质量,还包括人类健康、生物多样性、气候变化等多个方面。因此,对大气污染的监测和分析变得越来越重要。在这个方面,R语言已经成为了数据科学家、环境科学家以及政策制定者们的工具之一,因为其强大的数据分析能力、灵活的数据可视化能力以及丰富的统计工具箱。 在大气污染领域中,R语言应用案例非常多。其中一个代表性的案例就是大气污染数据分析。该案例中,利用R语言对大气污染监测的国际数据集进行了分析和可视化,探讨了全球大气污染的状况、变化趋势以及其影响因素等问题。具体来说,该案例主要通过以下步骤完成数据分析: 1. 数据收集:获取全球大气污染监测站的数据集,并通过R语言中常用的数据科学包如dplyr、tidyr、magrittr、ggplot2等进行数据处理数据清洗,以便数据的更加准确和规范。 2. 数据分析:利用R语言中强大的绘图和数据分析工具箱,从数据中提取出关键信息、探测数据的分布模式和分析变化趋势等。比如,可以针对不同地区的监测站数据进行比较与分析,从而得出全球大气污染的一些普遍规律和统计特征。 3. 结果展示:利用R语言中的数据可视化工具,将分析结果以可视化形式呈现,更有利于数据的交流和传播。比如,可以通过地图绘制、散点图、折线图等方式,将全球大气污染的状况以及其影响因素展示出来。 总之,R语言在大气污染数据分析中具有丰富的工具和方法,不仅可以从数据中提取出关键信息,在分析结果的可视化展示方面表现也非常出色,使得研究人员能够更好地理解和应对大气污染的问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值