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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM