【R语言】R语言函数练习——东北大学大数据班R实训第四次作业


title: “R实训第四次作业”
output: html_notebook

题目1:

1.通过读取“hospital-data.csv”将数据保存到df中,获取该数据的条数;查看
数据中的前5条数据。

df<-read.csv("C:\\Users\\zzh\\Desktop\\R语言\\R第4次实训\\数据\\hospital-data.csv")
nrow(df)
head(df,n=5)

2.查看数据概况;求得邮编的范围。

summary(df)
range(df$ZIP.Code)

3.默认电话号码是个数值,没有实际意义;应用sapply函数,通过调用用户自定
义函数,返回电话号码的最大值,最小值,均值,中位数,标准差和方差。

getSummary<-function(x,na.omit=FALSE){
  if(na.omit)
    #X<-na.omit(x)
    x<-x[!is.na(x)] 
  getMax<-max(x)
  getMin<-min(x)
  getMean<-mean(x)
  getMedian<-median(x)
  getSd<-sd(x)
  getVar<-var(x)
  return(c(max=getMax,min=getMin,mean=getMean,median=getMedian,sd=getSd,var=getVar))
}
sapply(df["Phone.Number"], getSummary,na.omit=TRUE)

4.利用aggregate求取各州的电话号码的中位数。

aggregate(df["Phone.Number"],by=list(State=df$State),median)

5.利用by求取各城市的电话号码的最大值和最小值;显示结果的前3条数据。

getMax_Min<-function(x,na.omit=FALSE){
  if(na.omit){
    x<-na.omit(x)
  }
  getMax<-max(x)
  getMin<-min(x)
  return(c(max=getMax,min=getMin))
}
head(by(df["Phone.Number"],df$City,getMax_Min,na.omit=TRUE),n=3)

6.对所属州生成简单的频数统计表;并将这个频数表转化为比例值。

# mytable <- with(df, table(State))
mytable <- table(df$State)
mytable
mytable<-prop.table(mytable) # proportions
mytable

7.建立所属州和医院类型的二维列联表,命名为mycontable;按列生成边际和。

# mycontable<-with(df, table(State,Hospital.Type))
mycontable<-table(df$State,df$Hospital.Type)
head(mycontable)
# mycontable <- xtabs(~ State+Hospital.Type, data=df)
# head(mycontable)
margin.table(mycontable, 2) # column sums
# addmargins(mycontable) # add row and column sums to table

8.利用CrossTable建立所属乡镇和是否提供急救服务字段的二维列联表,命名为
mycrosstable。(注:安装gmodels 包)

# install.packages("gmodels")
library(gmodels)
mycrosstable <- CrossTable(df$County,df$Emergency.Services)

题目2

题目2:
1.通过读取文件outcome-of-care-measures.csv获取数据保存到care_df中,编写一个名为 best的函
数,找到一个州中最好的医院,函数有两个参数,
一个是有两个字母缩写的州名称,
另一个是结果名称,包括(heart attack, heart failure, pneumonia),
函数的返回结果为30天死亡率最低的医院名称。
在处理排名的时候,如果出现死亡率相等的情况,将医院按照字母表顺序排序,取第一家医院。
注意检查读入数据的类型,以免排序的时候出现问题!!

care_df <- read.csv("C:\\Users\\zzh\\Desktop\\R语言\\R第4次实训\\数据\\outcome-of-care-measures.csv")
dim(care_df)
best <- function(state, outcome) {
  if (!state %in% care_df$State)
    return("invalid state")
  if (!outcome %in% c("heart attack", "heart failure", "pneumonia"))
    return("invalid outcome")
  a <- care_df[care_df$State == state,]
  if (outcome == "heart attack") {
    a <-
      a[a$Hospital.30.Day.Death..Mortality..Rates.from.Heart.Attack != "Not Available",]
    a$Hospital.30.Day.Death..Mortality..Rates.from.Heart.Attack <-
      as.numeric(a$Hospital.30.Day.Death..Mortality..Rates.from.Heart.Attack)
    b <-
      a[order(a$Hospital.30.Day.Death..Mortality..Rates.from.Heart.Attack), ]
  } else if (outcome == "heart failure") {
    a <-
      a[a$Hospital.30.Day.Death..Mortality..Rates.from.Heart.Failure != "Not Available",]
    a$Hospital.30.Day.Death..Mortality..Rates.from.Heart.Failure <-
      as.numeric(a$Hospital.30.Day.Death..Mortality..Rates.from.Heart.Failure)
    b <-
      a[order(a$Hospital.30.Day.Death..Mortality..Rates.from.Heart.Failure), ]
  } else{
    a <-
      a[a$Hospital.30.Day.Death..Mortality..Rates.from.Pneumonia != "Not Available",]
    a$Hospital.30.Day.Death..Mortality..Rates.from.Pneumonia <-
      as.numeric(a$Hospital.30.Day.Death..Mortality..Rates.from.Pneumonia)
    b <-
      a[order(a$Hospital.30.Day.Death..Mortality..Rates.from.Pneumonia), ]
  }
  return(hospital = b[1,]["Hospital.Name"])
}
best("TX", "heart failure")
best("MD", "heart attack") 
best("MD", "pneumonia")
best("BB", "heart attack")
best("NY", "hert attack")
posted @ 2019-12-03 19:27  爱做梦的子浩  阅读(548)  评论(1编辑  收藏  举报