R语言入门第六集 实验五:综合应用

R语言入门第六集 实验五:综合应用



一、资源

【R语言】沈阳地铁数据处理及站间流量统计——R语言第五次实训

lubridate—轻松处理日期时间

数据整理—dplyr包(mutate系列)

CEILING函数

R语言轻巧的时间包hms

R语言中%>%的含义是什么

R数据分析:如何在R中使用mutate

R语言日常笔记(1)filter函数

【R语言】必学包之data.table包

R语言 两种data.frame中数据类型转换的方式

R语言中data.Table中的{ . .N := keyby }

R读数据stringsAsFactors=F,存数据时row.names = F



二、答案更新纠正

原答案中的第一、二题并无更新,不在此处另作篇幅叙述。



三、答案

实验五 综合应用

题目1:
1.1数据处理【只用SY-20150401.csv】
统计每5分钟,各站点的进出站流量(说明:00:00:01在第一个5分钟内,00:10:13在第三个5分钟内),由于一天可能多次乘坐地铁,根据卡号和进站时间,查询最近出站的时间,作为本次出站时间。参考函数lubridate::hms,lubridate::period_to_seconds。处理的最终结果:dataframe(名称trade.metro.in.out)

字段 字段说明
card.id 卡 id
time.in 进站时间
line.in 进站线路
station.in 进站站点
M5.in 第几个 5 分钟进站
time.out 出站时间
line.out 出站线路
station.out 出站站点
money 票价
M5.out 第几个 5 分钟出站
duration 乘坐时间(单位:秒)

提交的表格按照 card.id排序。Notebook中展示输出结果为head(trade.metro.in.out,10),并输出本地文件 shmetro_line_in_out.csv

library(tidyr)
library(dplyr)
library(lubridate)

df <-read.csv("SY-20150401.csv")

colnames(df) <- c('card.id','date','time','station','vehicle','money','property')

trade.metro<-separate(df ,station, c('line', 'station'), sep = '号线')

trade.metro <- trade.metro %>% mutate(M5=ceiling(period_to_seconds(hms(time))/300))

trade.metro.in <- trade.metro %>% filter(money==0)  %>% select(card.id,"time.in"=time,"line.in"=line,"station.in"=station,"M5.in"=M5)

trade.metro.out <- trade.metro %>% filter(money>0) %>% select(card.id,"time.out"=time,"line.out"=line,"station.out"=station,money,"M5.out"=M5)

trade.metro.in.out <- merge(trade.metro.in, trade.metro.out, by = "card.id") %>% mutate(duration = (period_to_seconds(hms(time.out)) - period_to_seconds(hms(time.in)))) %>% filter(duration > 0)

trade.metro.in.out <- data.table(trade.metro.in.out)
trade.metro.in.out[, duration_min := min(duration), by=list(card.id, M5.in)]
trade.metro.in.out <- trade.metro.in.out %>% filter(duration==duration_min) %>% select(-duration_min)

trade.metro.in.out<-trade.metro.in.out[order(trade.metro.in.out$card.id),]

trade.metro.in.out<-as.data.frame(trade.metro.in.out)

class(trade.metro.in.out)

head(trade.metro.in.out,10)

write.csv(trade.metro.in.out,"shmetro_line_in_out.csv",row.names = F)

题目2:
2.1统计进站与出站之间的流量
通过题目1中的dataframe(trade.metro.in.out)进行统计,统计进站与出站之间的流量;然后选取流量最大的前10个站点,在Notebook中查看前6条。注意提交内容要包括处理后的shmetro_line_in_out.csv,与源码放在一起 。

trade.metro.in.out <- data.table(trade.metro.in.out)

flow <- trade.metro.in.out[,.(passenger.flow=.N), keyby=.(station.in,station.out)]

flow<-flow[order(flow$passenger.flow,decreasing = TRUE),]

result2<-flow[1:10,]

head(result2,6)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值