• R语言数据处理60题


    #author lee
    #date 2021.8.26
    
    library(tidyverse)
    #1创建数据
    df <- data.frame(
      "grammer" = c("Python","C","Java","GO",NA,"SQL","PHP","Python"),
      "score" = c(1,2,NA,4,5,6,7,10)
    )
    df
    #2指定行提取
    #df[which(df$grammer == 'Python'),]
    df %>% filter(grammer == "Python")
    #3提取列名
    names(df)
    #colnames(df)
    #4数据修改,根据索引,方法1
    #names(df)[2]<-paste("score")
    #colnames(df)[2]<-"score"
    #4数据修改,根据名称,方法2
    #names(df)[names(df)=="score"]<-"popularity"
    #colnames(df)[names(df)=="score"]<-"popularity"
    #4数据修改,更改列名,方法3
    options(warn=-1)#忽视警告信息
    df<-df %>% rename(popularity = score)#修改后的在前
    #5统计grammar每种编程语言中语言的次数
    table(df$grammer)#行的形式
    df %>% count(grammer)#列的形式
    #7(筛选行),提取popularity大于3的行
    df %>% filter(popularity>3)
    #8(数据去重复),按照grammar列去除重复
    df %>% distinct(grammer, .keep_all = TRUE)
    #9(数据计算)计算popularity的平均值
    df %>% summarise(popularity_avg=mean(popularity))
    #10(格式转换)将grammar列转换为序列
    df$grammer#R语言中,从数据框中提取出来就是字符向量
    #11数据保存,保存为excel
    writexl::write_xlsx(df,"filename.xlsx")
    #12查看数据的行数和列数
    dim(df)
    #13筛选行,筛选popularity大于3小宇7的行
    df %>% filter(popularity >3 & popularity <7)
    #14交换两列的位置
    df %>% select(popularity,grammer)
    #15筛选行,提取popularity最大值所在的行
    df %>% filter(popularity == max(popularity,na.rm = TRUE))#这里由于一开始没有对NA进行处理,所以报错了,需要加上na.rm
    df %>% top_n(1,popularity)
    #16查看最后几行的数据
    tail(df)
    #17删除最后一行数据
    df %>% slice(-n())
    #18修改数据,添加一行数据“perl”,6
    newrow = tibble(grammer="perl",popularity=4)
    df %>% bind_rows(newrow)
    #19数据整理,对数据按照popularity列从大到小排序
    df %>% arrange(desc(popularity))#不加desc,从小到大排序
    #20统计grammar列每个字符串的长度
    df %>% mutate(str_grammar=str_length(grammer))
    #21读取本地excel数据
    df<- readxl::read_xlsx("test.xlsx")
    #22查看数据的前几行,后几行,类似linux
    head(df)
    tail(df)
    dim(df)
    #23将salary列转换为最大值与最小值的平均值
    df<-df %>% separate(salary,into = c("low","high"),sep = "-") %>%
      mutate(salary=(parse_number(low)+parse_number(high))*1000/2) %>%
      select(-c(low,high))
    #24分组汇总,根据学历分组,并计算平均薪资
    df %>% group_by(education) %>%
      summarise(salary_ave=mean(salary))
    #26查看数据结构信息
    str(df)
    #27查看数据汇总信息,最小值,最大值,平均值
    summary(df)
    #28新增一列将salary离散成三水平
    df<-df %>% mutate(class=case_when(salary>=0 & salary< 5000 ~"low",
                                  salary>5000 & salary<15000 ~'middle',
                                  TRUE~"high"))
    #29按照salary进行降序排列
    df %>% arrange(desc(salary)) %>%
      head()
    #30提取第3行数据
    df %>% slice(3)
    #32绘制salary的频率分布直方图
    df %>% ggplot(aes(x=salary))+geom_histogram(bins = 10)
    #33,绘制salary的频率密度曲线图
    df %>% ggplot(aes(x=salary))+geom_density()
    #34数据删除,删除最后一列class
    df %>% select(-class) %>% head()
    #35,36 将df的第一列与第二列合并为新的一列
    df %>% unite("newcol",1:2,sep = "")
    df %>% mutate(Newcol=paste(education,salary,sep = "-"))#transmute,只保留新列
    #37数据计算
    df %>% summarise(range=max(salary)-min(salary))
    #38拼接第一行和最后一行
    bind_rows(df[1,],df[nrow(df),])
    #39将第3行添加到末尾
    bind_rows(df,df[3,])
    #40查看每一列的数据类型
    str(df)
    #41将第一列设置为索引,distinct,用于去除重复,索引不能有重复
    df %>% distinct(createTime,.keep_all = TRUE) %>%
      column_to_rownames("createTime") %>%
      head()
    #42生成一个和df等长的随机数据框
    df1<-tibble(rnums=sample.int(10,nrow(df),replace = TRUE))
    #43合并生成的数据框
    df<-bind_cols(df,df1)
    #44生成新列new,为salary减去随机数列
    df<- df %>% mutate(new=salary-rnums)
    #45检查缺失值,检查数据中是否含有任何缺失值
    anyNA(df)
    anyNA(df$salary)
    #46将salary列的类型转换为浮点数
    df %>% mutate(rnums=as.double(rnums)) %>%
      head()
    #47计算salary列大于10000的次数
    df %>% summarise(n=sum(salary>10000))
    df %>% count(salary>10000)
    #48统计每种学历出现的次数
    table(df$education)
    df %>% count(education)
    #49查看education列共有几种学历
    df %>% distinct(education)
    #50提取salary与new列之和大于60000的最后三行
    df %>% filter(salary+new >50000) %>%
      slice((n()-2):n())
    df %>% filter(salary+new >50000) %>%
      slice_tail(n=3)
    #51使用绝对路径读取本地EXcel数据
    df<-readxl::read_xls("51-80.xls")
    #52查看数据框的前三行
    df %>% head(3)
    head(df,3)
    #53查看每列趋势之状况
    anyNA(df)
    if(!require("naniar")) install.packages("naniar")
    library(naniar)
    df %>% miss_var_summary()
    #54查看日期列含有缺失值的行
    df %>% filter(is.na(日期))
    #55查看每列缺失值在哪些行
    naIdx<-df %>% where_na() #返回na的行列索引
    split(naIdx[,1], naIdx[,2])#提取对应的行列
    #56删除所有含有缺失值的行
    df %>% drop_na()
    #57绘制收盘价的折线图
    df %>% 
      ggplot(aes(日期, `收盘价(元)`)) +
      geom_line()
    #58同时绘制开盘价与收盘价
    df %>% 
      select(日期,`开盘价(元)`,`收盘价(元)`) %>%
      pivot_longer(-日期,names_to = "type",values_to = "price")%>%
      ggplot(aes(日期,price,col=type))+geom_line()
    #59绘制涨跌幅的直方图
    df %>% ggplot(aes(`涨跌幅(%)`))+geom_histogram()
    #60让直方图更细致,bin更多
    df %>% ggplot(aes(`涨跌幅(%)`))+geom_histogram(bins = 40)
    #61用df的列名创建数据框
    as_tibble(names(df))
    #62输出所有换手率不是数字的行
    df %>% 
      mutate(`换手率(%)`= parse_number(`换手率(%)`)) %>%
      filter(is.na(`换手率(%)`))
    #63输出所有换手率为--的行
    df %>% 
      filter(`换手率(%)` == "--")
    #64充值df的行号
    rownames(df) =NULL# R中无行号就是数字索引
    #65删除所有换手率不是数字的行
    df %>% 
      mutate(`换手率(%)`= parse_number(`换手率(%)`)) %>%
      filter(!is.na(`换手率(%)`))
    #66绘制换手率的密度图
    df %>%
      ggplot(aes(`换手率(%)`))+geom_density()
  • 相关阅读:
    list拖动
    android sdk
    AwwwB推荐网站全盘克隆
    WPF中的容器控件——WrapPanel
    WPF中的容器控件——StackPanel
    MFC应用程序中指针的使用
    排序算法之插入排序
    转:MFC 常用语句集锦
    【转】MFC学习总结
    排序算法之冒泡排序
  • 原文地址:https://www.cnblogs.com/xiaosagege/p/15206868.html
Copyright © 2020-2023  润新知