r语言查找是否存在空值_第5课:一个周末学会R语言数据处理:高效透视数据

06181c166d8a084bd217529f177ae7e3.png

学习本节课,你可以:

  1. 学会如何构建新的字段
  2. 学会如何进行字段类型转换
  3. 学会如何实现数据透视表转换

一、几个重要知识点:

  • tidyr中的spread()和gathr()函数介绍

用于将数据展开和合并,类似excel中的数据透视功能

#install.packages('dplyr')
library(dplyr)

data <- data_frame(区域= c('浦东','浦东','黄浦','黄浦','徐汇','徐汇'),
                      年份= c(2000,2001,2000,2001,2000,2001),
                      均价= c(58139,59663,86019,88684,81616,87725))

data_spread <- data %>% spread(key = 年份, value = 均价)

data_gather <- data_spread %>% gather(`2000`,`2001`,key = 年份, value = 均价)

54661cd470863630bc599aec872b9b4d.png
展开和合并后的数据结果
  • dplyr中的mutate()函数介绍

用于构建新的字段

#install.packages('dplyr')
library(dplyr)

data <- data_frame(区域= c('浦东','浦东','黄浦','黄浦','徐汇','徐汇'),
                      年份= c(2000,2001,2000,2001,2000,2001),
                      均价= c(58139,59663,86019,88684,81616,87725))

data_mutate <- data %>% mutate(均价_万元 = 均价 / 1000)

8fd8f5a7e6437543599bb64ae70fd05c.png
mutate后新增的字段

二、原始数据及目标数据格式

原始小区数据中,我们有每个小区的单价,我希望获得2000年-2010年每个区的小区均价的交叉数据汇总,大家可以结合之前学过的知识点思考下,如何处理?

  • 原始数据如下:
xiaoqu.csv
5.4M
·
百度网盘

861cfd4b416702905e857805823ade2d.png
原始数据
  • 目标数据如下:

bcccc6a1d6b27411cc4687c4db94880a.png
目标数据

三、文件中的几个坑

  • 小区年份和小区单价中既有数字又有中文(如“未知”和“暂无”),如何转化成数字?

8cc8fafca27d305e687cca733a07ed19.png
年份和价格中的特殊值

答:用dplyr包中的mutate()函数构建新的字段,用as.numeric()函数转换成字符类型(中文字符自动转换为空值),即:mutate(xiaoqu_price_new = as.numeric(xiaoqu_price), xiaoqu_year_new = as.numeric(xiaoqu_year))

  • 分组汇总时,有空值,如何处理?

答:(,na.rm=T)可以无视空值进行均值计算,即:group_by(xiaoqu_district,xiaoqu_year) %>% summarise(均价 = mean(xiaoqu_price_new,na.rm = T))

  • 如何整理成数据透视表的格式?

答:用tidyr包中的spread()函数可以将表转换为数据透视表格式(目标格式)

四、实现代码

library(tidyr)
library(dplyr)
library(readr)
#读取xiaoqu.csv文件,注意编码格式加入locale = locale(encoding = "GB18030"),避免出现乱码
xiaoqu_data <- read_csv('D:/从0到1学习数据科学/xiaoqu.csv', locale = locale(encoding = "GB18030"))

tidy_data <- xiaoqu_data %>% 
  #构建新字段,用as.numeric()方法进行字符转换
  mutate(xiaoqu_price_new = as.numeric(xiaoqu_price),
         xiaoqu_year_new = as.numeric(xiaoqu_year)) %>% 
  #过滤空价格以及年份在2000至2010年的数据
  filter(!is.na(xiaoqu_price_new)) %>% 
  filter(xiaoqu_year_new %>%  between(2000,2010)) %>% 
  #汇总和聚合,获取小区年份的均价
  group_by(xiaoqu_district,xiaoqu_year) %>% 
  summarise(均价 = mean(xiaoqu_price_new,na.rm = T)) %>% 
  #扩展成数据透视表形式
  spread(key = xiaoqu_year,value = 均价)

数据处理课程:

有马骏:第0课:一个周末学会R语言数据处理:从数据库到数仓再到数据集市​zhuanlan.zhihu.com
54b0e4f53bafd47fc985ba25a16437b7.png
有马骏:第1课:一个周末学会R语言数据处理:表快速读取​zhuanlan.zhihu.com
54b0e4f53bafd47fc985ba25a16437b7.png
有马骏:第2课:一个周末学会R语言数据处理:表拆分和拼接​zhuanlan.zhihu.com
54b0e4f53bafd47fc985ba25a16437b7.png
有马骏:第3课:一个周末学会R语言数据处理:表关联join​zhuanlan.zhihu.com
54b0e4f53bafd47fc985ba25a16437b7.png
有马骏:第4课:一个周末学会R语言数据处理:分组和汇总​zhuanlan.zhihu.com
54b0e4f53bafd47fc985ba25a16437b7.png

数据采集课程:

有马骏:第0课:一个周末学会R语言数据采集:数据从哪里来?​zhuanlan.zhihu.com
0f745a18fb328c7ca38d7d02f38f2513.png
有马骏:第1课:一个周末学会R语言数据采集:爬虫介绍​zhuanlan.zhihu.com
8832713cf2237b63fb7d1bf572b16b8b.png
有马骏:第2课:一个周末学会R语言数据采集:R爬虫环境安装​zhuanlan.zhihu.com
8832713cf2237b63fb7d1bf572b16b8b.png
有马骏:第3课:一个周末学会R语言数据采集:XPath基础​zhuanlan.zhihu.com
8832713cf2237b63fb7d1bf572b16b8b.png
有马骏:第4课:一个周末学会R语言数据采集: Selenium常用操作​zhuanlan.zhihu.com
8832713cf2237b63fb7d1bf572b16b8b.png
有马骏:第5课:一个周末学会R语言数据采集:正则表达式入门​zhuanlan.zhihu.com
8832713cf2237b63fb7d1bf572b16b8b.png
有马骏:第6课:一个周末学会R语言数据采集:爬取链家小区数据​zhuanlan.zhihu.com
8832713cf2237b63fb7d1bf572b16b8b.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值