日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

go语言csv包_玩转数据处理120题R语言版本

發布時間:2025/3/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 go语言csv包_玩转数据处理120题R语言版本 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點擊上方“早起Python”,關注并星標公眾號

和我一起玩Python

本文為玩轉數據處理120題|R語言版本
習題|劉早起,解答|陳熹

大家好,本文為R語言數據處理120題系列完整版本。作者精心挑選120道數據處理中相關操作以習題形式發布,一共涵蓋了數據處理、計算、可視化等常用操作,并對部分題目給出了多種解法與注解。動手敲一遍代碼一定會讓你有所收獲!

1創建DataFrame題目:將下面的字典創建為DataFramedata = {"grammer":["Python","C","Java","GO",np.nan,"SQL","PHP","Python"],
???????"score":[1,2,np.nan,4,5,6,7,10]}難度:?期望結果

R語言解法# R中沒有字典概念,故直接創建dataframe/tibble
#> 第一種
df???"grammer"?= c("Python","C","Java","GO",NA,"SQL","PHP","Python"),
??"score"?= c(1,2,NA,4,5,6,7,10)
)
#> 第二種
library(tibble)
df ??"grammer"?= c("Python","C","Java","GO",NA,"SQL","PHP","Python"),
??"score"?= c(1,2,NA,4,5,6,7,10)
)
# 也可以用tribble橫向建tibble注:1-20題均基于該數據框給出?2數據提取題目:提取含有字符串"Python"的行難度:??期望結果grammer??score
0?Python????1.0
7?Python???10.0

R語言解法

df[which(df$grammer?== 'Python'),]3提取列名題目:輸出df的所有列名難度:?期望結果Index(['grammer',?'score'], dtype='object')

R語言解法

names(df)
# [1] "grammer" "score"4修改列名題目:修改第二列列名為'popularity'難度:??R語言解法df %
??rename(popularity = score)5字符統計題目:統計grammer列中每種編程語言出現的次數難度:??R語言解法# 神方法table
table(df$grammer)6缺失值處理題目:將空值用上下值的平均值填充難度:???上下兩數的均值
df['popularity'] = df['popularity'].fillna(df['popularity'].interpolate())

R語言解法

library(Hmisc)
index?is.na(df$popularity))
df$popularity ???????????????????????(unlist(df[index-1, 2] +
???????????????????????????????df[index+1, 2]))/2)7數據提取題目:提取popularity列中值大于3的行難度:??R語言解法df %>%
??filter(popularity > 3)
# 等價于
df[df$popularity > 3,] # 這種方法跟pandas很相似8數據去重題目:按照grammer列進行去重難度:??R語言解法df[!duplicated(df$grammer),]9數據計算題目:計算popularity列平均值難度:??R語言解法#> 第一種
mean(df$popularity)
# [1] 4.75

#> 第二種
df %>%
??summarise(mean = mean(popularity))
## A tibble: 1 x 1
# mean
#
# 1 4.7510格式轉換題目:將grammer列轉換為list難度:??R解法unlist(df$grammer)
# [1] "Python" "C" "Java" "GO" NA "SQL" "PHP" "Python"11數據保存題目:將DataFrame保存為EXCEL難度:??R解法#R對EXCEL文件不太友好
#第一種方法:利用readr包轉為csv再用EXCEL打開
#文件本質依然是csv
library(readr)
write_excel_csv(df,'filename.csv')

#第二種方法:利用openxlsx包
openxlsx::write.xlsx(df,'filename.xlsx')

#也可以用xlsx包,但需要先配置JAVA環境
#確保JAVA配置到環境變量中并命名為JAVA_HOME
Sys.getenv("JAVA_HOME")
install.packages('rJava')
install.packages("xlsxjars")
library(rJava)
library(xlsxjars)
xlsx::write.xlsx(df,'filename.xlsx')12數據查看題目:查看數據行列數難度:?R解法dim(df)
# [1] 8 213數據提取題目:提取popularity列值大于3小于7的行難度:??R解法library(dplyr)
df %>%
??filter(popularity > 3?& popularity <7)
# 等價于
df[(df$popularity > 3) & (df$popularity <7),]14位置處理題目:交換兩列位置難度:???R解法df?%
????select(popularity,everything())15數據提取題目:提取popularity列最大值所在行難度:??R解法df %>%
??filter(popularity == max(popularity))
# 同理也有類似pandas的方法
df[df$popularity == max(df$popularity),]16數據查看題目:查看最后5行數據難度:?R解法# R中head和tail默認是6行,可以指定數字
tail(df,5)17數據修改題目:刪除最后一行數據難度:?R解法df[-dim(df)[1],]
# 等價于
df %>%
??filter(rownames(df) != max(rownames(df)))18數據修改題目:添加一行數據['Perl',6.6]難度:??R解法row 6.6,'Perl') # 需要和列的位置對應
# 或者建數據框
row ??"grammer"?= c("Perl"),
??"popularity"?= c(6.6)
)

df 19數據整理題目:對數據按照"popularity"列值的大小進行排序難度:??R解法df?%
??arrange(popularity)20字符統計題目:統計grammer列每個字符串的長度難度:???R解法library(Hmisc)
library(stringr)
df$grammer $grammer,'R')
str_length(df$grammer)

df$len_str $grammer)

第二期:數據處理基礎

21數據讀取題目:讀取本地EXCEL數據難度:?R解法#R語言處理excel不友好,直接讀取日期時間數據會變成實數
#openxlsx::read.xlsx中的detectDates參數只能識別純日期
#as.Data轉換該列后時間數據丟失,只有日期
#故先把excel文件轉存為csv后用readr包讀取
# 該方法不理想
library(openxlsx)
df 'pandas120.xlsx',detectDates = T)
df$createTime as.Date(df$createTime,origin="1900-01-01")
# 轉存csv后再讀
library(readr)
df 'pandas120.csv')21—50部分習題與該數據相關22數據查看題目:查看df數據前5行難度:?期望輸出

R解法# 默認是6行,可指定行數
head(df,5)23數據計算題目:將salary列數據轉換為最大值與最小值的平均值難度:????期望輸出

R解法library(stringr)
df$salary %
??str_replace_all('k','') %>%
??str_split('-',simplify = T) %>%
??apply(2,as.numeric) %>%
??rowMeans() * 100024數據分組題目:將數據根據學歷進行分組并計算平均薪資難度:???期望輸出education?salary?? ? ? ? ? ?
不限 19600.000000
大專 10000.000000
本科 19361.344538
碩士 20642.857143R解法df?%>%
??group_by(education) %>%
??summarise(mean = mean(salary))25時間轉換題目:將createTime列時間轉換為月-日難度:???期望輸出

R解法#轉化后該列屬性是 字符串,R中對時間格式要求嚴格
df$createTime as.Date(df$createTime) %>%
??str_replace('2020-','')26數據查看題目:查看索引、數據類型和內存信息難度:?期望輸出<class?'pandas.core.frame.DataFrame'>
RangeIndex:?135?entries,?0?to?134
Data columns (total?4?columns):
createTime?135?non-null?object
education?135?non-null?object
salary?135?non-null?int64
categories?135?non-null?category
dtypes: category(1), int64(1), object(2)
memory usage:?3.5+ KBR解法str(df)

# 內存查看需要用到其他的庫
library(pryr)
object_size(df)
# 6.66 kB27數據查看題目:查看數值型列的匯總統計難度:?R解法summary(df)28數據整理題目:新增一列根據salary將數據分為三組難度:????輸入期望輸出

R解法#用ifelse也可以
#底層原理有差別但實現結果一樣
df %
??mutate(categories = case_when(
????salary >= 0?& salary < 5000?~ '低',
????salary >= 5000?& salary < 20000?~ '低',
????TRUE ~ '高'
??))29數據整理題目:按照salary列對數據降序排列難度:??R解法df?%>%
??arrange(desc(salary))30數據提取題目:取出第33行數據難度:??R解法df[33,]31數據計算題目:計算salary列的中位數難度:??R解法median(df$salary)
# [1] 1750032數據可視化題目:繪制薪資水平頻率分布直方圖難度:???期望輸出

R解法library(ggplot2)
library(patchwork)

df?%>%
??ggplot(aes(salary)) +
??geom_histogram() +
??df?%>%
??ggplot(aes(salary)) +
??geom_histogram(bins = 10) # 這個跟python的bins一致33數據可視化題目:繪制薪資水平密度曲線難度:???期望輸出

R解法df?%>%
??ggplot(aes(salary)) +
??geom_density() +
??xlim(c(0,70000))34數據刪除題目:刪除最后一列categories難度:?R解法df?4]
# 提高可讀性可采用如下代碼
df %
??select(-c('categories'))35數據處理題目:將df的第一列與第二列合并為新的一列難度:??R解法df %
??mutate(test?= paste0(df$education,df$createTime))36數據處理題目:將education列與salary列合并為新的一列難度:???備注:salary為int類型,操作與35題有所不同R解法df?%
??mutate(test1 =
???????????paste0(df$salary,df$education))37數據計算題目:計算salary最大值與最小值之差難度:???R解法df %>%
??summarise(delta = max(salary) - min(salary)) %>%
??unlist()
# delta
# 4150038數據處理題目:將第一行與最后一行拼接難度:??R解法rbind(df[1,],df[dim(df)[1],])39數據處理題目:將第8行數據添加至末尾難度:??R解法rbind(df,df[8,])40數據查看題目:查看每列的數據類型難度:?期望結果createTime?object
education?object
salary int64
test?object
test1?object
dtype:?objectR解法str(df)
# tibble [135 x 5] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
# $ createTime: chr [1:135] "03-16" "03-16" "03-16" "03-16" ...
# $ education : chr [1:135] "本科" "本科" "不限" "本科" ...
# $ salary : num [1:135] 27500 30000 27500 16500 15000 14000 23000 12500 7000 16000 ...
# $ test : chr [1:135] "本科03-16" "本科03-16" "不限03-16" "本科03-16" ...
# $ test1 : chr [1:135] "27500本科" "30000本科" "27500不限" "16500本科" ...41數據處理題目:將createTime列設置為索引難度:??R解法df %>%
??tibble::column_to_rownames('createTime')42數據創建題目:生成一個和df長度相同的隨機數dataframe難度:??R解法df1 135,function(n) {
??replicate(n,sample(1:10,1))
})
# 列名暫時不一樣,下一題重命名43數據處理題目:將上一題生成的dataframe與df合并難度:??R解法df %
??rename(`0` = df1)
# 非常規命名需要用``包裹變量名44數據計算題目:生成新的一列new為salary列減去之前生成隨機數列難度:??R解法df %
??mutate(new?= salary - `0`)45缺失值處理題目:檢查數據中是否含有任何缺失值難度:???R解法# 這個包的結果呈現非常有趣
library(mice)
md.pattern(df)46數據轉換題目:將salary列類型轉換為浮點數難度:???R解法as.double(df2$salary)47數據計算題目:計算salary大于10000的次數難度:??R解法df?%>%
??filter(salary > 10000) %>%
??dim(.) %>%
??.[1]
48數據統計題目:查看每種學歷出現的次數難度:???期望輸出本科?119
碩士?7
不限?5
大專?4
Name: education, dtype:?int64R解法table(df$education)49數據查看題目:查看education列共有幾種學歷難度:??R解法length(unique(df$education))
# [1] 450數據提取題目:提取salary與new列的和大于60000的最后3行難度:????期望輸出

R解法df[df$salary + df$new?> 60000,] %>%
??.[nrow(.)-3+1:nrow(.),] %>%
??na.omit(.)51數據讀取題目:使用絕對路徑讀取本地Excel數據難度:?R解法# 轉存csv后再讀
library(readr)
df 'C:/Users/chenx/Documents/Data Analysis/Pandas51-80.csv')

備注

請將答案中路徑替換為自己機器存儲數據的絕對路徑,51—80相關習題與該數據有關

52數據查看題目:查看數據前三行難度:?期望結果

R解法head(df,3)53缺失值處理題目:查看每列數據缺失值情況難度:??期望結果代碼?1
簡稱?2
日期?2
前收盤價(元)?2
開盤價(元)?2
最高價(元)?2
最低價(元)?2
收盤價(元)?2
成交量(股)?2
成交金額(元)?2
.................R解法colSums(is.na(df))54缺失值處理題目:提取日期列含有空值的行難度:??期望結果

R解法df[is.na(df$日期),]55缺失值處理題目:輸出每列缺失值具體行數難度:???期望結果列名:"代碼", 第[327]行位置有缺失值
列名:"簡稱", 第[327, 328]行位置有缺失值
列名:"日期", 第[327, 328]行位置有缺失值
列名:"前收盤價(元)", 第[327, 328]行位置有缺失值
列名:"開盤價(元)", 第[327, 328]行位置有缺失值
列名:"最高價(元)", 第[327, 328]行位置有缺失值
列名:"最低價(元)", 第[327, 328]行位置有缺失值
列名:"收盤價(元)", 第[327, 328]行位置有缺失值
................R解法library(glue)

for?(i in?names(df)){
??if(sum(is.na(df[,'日期'])) != 0){
????res1 is.na(df[,i]))
????res2 ',')
????print(glue('列名:"{i}", 第[{res2}]行有缺失值'))
??}
}56缺失值處理題目:刪除所有存在缺失值的行難度:??Python解法df.dropna(axis=0, how='any', inplace=True)

備注

axis:0-行操作(默認),1-列操作
how:any-只要有空值就刪除(默認),all-全部為空值才刪除
inplace:False-返回新的數據集(默認),True-在原數據集上操作57數據可視化題目:繪制收盤價的折線圖難度:??期望結果

R解法library(ggplot2)

df?%>%
??ggplot(aes(日期,`收盤價(元)`)) +
??geom_line()58數據可視化題目:同時繪制開盤價與收盤價難度:???期望結果

R解法df %>%
??ggplot() +
??geom_line(aes(日期,`收盤價(元)`), size=1.2, color='steelblue') +
??geom_line(aes(日期,`開盤價(元)`), size=1.2, color='orange') +
??ylab(c('價格(元)'))
# 這種畫出來沒有圖例,當然可以手動添加,但為了映射方便可以用另一種方法

library(tidyr)

df %>%
??select(日期,`開盤價(元)`,`收盤價(元)`) %>%
??pivot_longer(c(`開盤價(元)`,`收盤價(元)`),
???????????????names_to='type',values_to='price') %>%
??ggplot(aes(日期,price,color=type)) +
??geom_line(size=1.2) +
??scale_color_manual(values=c('steelblue','orange')) +
??theme_bw() +
??theme(
????panel.grid.major = element_blank(),
????panel.grid.minor = element_blank(),
????legend.title = element_blank(),
????legend.position = c(0.86, 0.9)
??)59數據可視化題目:繪制漲跌幅的直方圖難度:??期望結果

R解法df?%>%
??ggplot(aes(`漲跌幅(%)`)) +
??geom_histogram()
# 可以指定bins60數據可視化題目:讓直方圖更細致難度:??期望結果

R解法df?%>%
??ggplot(aes(`漲跌幅(%)`)) +
??geom_histogram(bins=30)61數據創建題目以data的列名創建一個dataframe難度:??R解法temp?62異常值處理題目打印所有換手率不是數字的行難度:???期望結果

R解法#換手率這一列屬性為chr,需要先強轉數值型
#如果轉換失敗會變成NA,判斷即可
df[is.na(as.numeric(df$`換手率(%)`)),]63異常值處理題目打印所有換手率為--的行難度:???R解法df?%>%
??filter(`換手率(%)`?== '--')

備注

通過上一題我們發現換手率的異常值只有--

64數據處理題目重置data的行號難度:?R解法rownames(df)
# 如果是tibble則索引始終是按順序

備注

有時我們修改數據會導致索引混亂

65異常值處理題目刪除所有換手率為非數字的行難度:???R解法df[!is.na(as.numeric(df$`換手率(%)`)),]
# 或者根據前幾題的經驗,非數字就是'--'
df %
??filter(`換手率(%)` != '--')66數據可視化題目繪制換手率的密度曲線難度:???期望結果

R解法df$`換手率(%)` as.double(df$`換手率(%)`)
ggplot(df) +
??geom_density(aes(`換手率(%)`))67數據計算題目計算前一天與后一天收盤價的差值難度:??R解法df?%>%
??summarise(delta = `收盤價(元)`?- lag(`收盤價(元)`))68數據計算題目計算前一天與后一天收盤價變化率難度:??R解法df?%>%
??summarise(pct_change = (`收盤價(元)`?- lag(`收盤價(元)`))/lag(`收盤價(元)`))69數據處理題目設置日期為索引難度:?R解法df %>%
??column_to_rownames(var='日期')70指標計算

題目以5個數據作為一個數據滑動窗口,在這個5個數據上取均值(收盤價)

難度:???R解法library(RcppRoll)
df?%>%
??transmute(avg_5 = roll_mean(`收盤價(元)`,n = 5,align="right",fill = NA))71指標計算

題目:以5個數據作為一個數據滑動窗口,計算這五個數據總和(收盤價)

難度:???R解法df?%>%
??transmute(sum_5 = roll_sum(`收盤價(元)`,n = 5,align="right",fill = NA))72數據可視化

題目:將收盤價5日均線、20日均線與原始數據繪制在同一個圖上

難度:???期望結果

R解法df?%>%
??mutate(avg_5 = roll_mean(`收盤價(元)`,n = 5,align="right",fill = NA),
?????????avg_20 = roll_mean(`收盤價(元)`,n = 20,align="right",fill = NA)) %>%
??ggplot() +
??geom_line(aes(日期,`收盤價(元)`),color = 'steelblue',size = 1.2) +
??geom_line(aes(日期,avg_5),color = 'orange',size = 1.2) +
??geom_line(aes(日期,avg_20),color = 'green',size = 1.2)73數據重采樣

題目:按周為采樣規則,取一周收盤價最大值

? 難度:???R解法library(plyr)

res?"1 week")),"[")
res_max res,function(n)max(n$`收盤價(元)`),simplify=TRUE)
as.data.frame(res_max)74數據可視化

題目:繪制重采樣數據與原始數據

??難度:???? 期望結果

R解法res?%>%
??rownames_to_column('date')
res$date as.Date(res$date)

ggplot(df) +
??geom_line(aes(日期,`收盤價(元)`),color = 'steelblue',size = 1.2) +
??geom_line(data = res, aes(date,res_max),
????????????color = 'orange',size = 1.2)75數據處理題目:將數據往后移動5天難度:??R解法lag(df,5)76數據處理題目:將數據向前移動5天難度:??R解法lead(df,5)77數據計算題目:使用expending函數計算開盤價的移動窗口均值難度:??R解法#R中沒有expanding完全一致的函數
#考慮到expanding實際功能就是累積均值
#可以用cummean
#但cummean的功能和我預想的不同
#可能是包之間相互干擾
#最后采用cumsum/1:n的形式完成本題

res %
??transmute(cummean = cumsum(`開盤價(元)`)/1:dim(df)[1])78數據可視化題目:繪制上一題的移動均值與原始數據折線圖難度:???期望結果

R解法library(tidyr)
df %>%
??cbind(res) %>%
??dplyr::rename(Opening_Price = `開盤價(元)`,
?????????Expanding_Open_Mean = cummean) %>%
??select(日期,Opening_Price,Expanding_Open_Mean) %>%
??pivot_longer(c(Opening_Price,Expanding_Open_Mean),
???????????????names_to = 'type',
???????????????values_to ='price') %>%
??ggplot(aes(日期,price,color = type)) +
??geom_line(size=1.2) +
??scale_color_manual(values=c('orange','steelblue')) +
??theme_bw() +
??theme(
????panel.grid.major = element_blank(),
????panel.grid.minor = element_blank(),
????legend.title = element_blank(),
????legend.position = c(0.9, 0.9)
??)79數據計算題目:計算布林指標難度:????R解法df %
??mutate(avg_20 = roll_mean(`收盤價(元)`,n = 20,align="right",fill = NA),
?????????upper_bound = avg_20 + 2?* roll_sd(`收盤價(元)`,n = 20,align="right",fill = NA),
?????????lower_bound = avg_20 - 2?* roll_sd(`收盤價(元)`,n = 20,align="right",fill = NA))80數據可視化題目:計算布林線并繪制難度:???期望結果

R解法df %>%
??dplyr::rename(former_30_days_rolling_Close_mean = avg_20,
????????????????Closing_Price = `收盤價(元)`) %>%
??select(日期,Closing_Price,
???????????former_30_days_rolling_Close_mean,upper_bound,lower_bound) %>%
??pivot_longer(c(Closing_Price,former_30_days_rolling_Close_mean,upper_bound,lower_bound),
???????????????names_to = 'type',
???????????????values_to ='price') %>%
??ggplot(aes(日期,price,color = type)) +
??geom_line(size=1.2) +
??scale_color_manual(values=c('steelblue','orange','red','green')) +
??theme_bw() +
??theme(
????panel.grid.major = element_blank(),
????panel.grid.minor = element_blank(),
????legend.title = element_blank(),
????legend.position = c(0.6, 0.2)
??)81數據查看題目:導入并查看pandas與numpy版本難度:?R語言解法packageVersion("tidyverse")
# [1] ‘1.3.0’
packageVersion("dplyr")
# [1] ‘0.8.99.9002’82數據創建題目:從NumPy數組創建DataFrame難度:?備注使用numpy生成20個0-100隨機數R語言解法df1 20,function(n)?{
??replicate(n,sample(1:100,1))
}) %>%
??as.data.frame(.) %>%
??dplyr::rename(`0` = V1)83數據創建題目:從NumPy數組創建DataFrame難度:?備注使用numpy生成20個0-100固定步長的數R語言解法df2 as.data.frame(seq(0,99,5)) %>%
??dplyr::rename(`0` = "seq(0, 99, 5)")84數據創建題目:從NumPy數組創建DataFrame難度:?備注使用numpy生成20個指定分布(如標準正態分布)的數R語言解法df3 as.data.frame(rnorm(20,0,1)) %>%
??dplyr::rename(`0` = "rnorm(20, 0, 1)")85數據創建題目:將df1,df2,df3按照行合并為新DataFrame難度:??R語言解法df?86數據創建題目:將df1,df2,df3按照列合并為新DataFrame難度:??期望結果0 1 2
0 95 0 0.022492
1 22 5?-1.209494
2 3 10 0.876127
3 21 15?-0.162149
4 51 20?-0.815424
5 30 25?-0.303792
...............R語言解法df?names(df) 0,1,2)87數據查看題目:查看df所有數據的最小值、25%分位數、中位數、75%分位數、最大值難度:??R語言解法summary(unlist(df))88數據修改題目:修改列名為col1,col2,col3難度:?R語言解法df %
??dplyr::rename(col1 = 1,
????????????????col2 = 2,
????????????????col3 = 3)
# 或者用類似pandas的方法
names(df) 'col1','col2','col3')89數據提取題目:提取第一列中不在第二列出現的數字難度:???R語言解法df[!(df$col1?%in% df$col2),1]90數據提取題目:提取第一列和第二列出現頻率最高的三個數字難度:???R語言解法count(unlist(c(df$col1,df$col2))) %>%
??arrange(desc(freq)) %>%
??filter(row_number() <= 3)91數據提取題目:提取第一列中可以整除5的數字位置難度:???R語言解法which(df['col1'] %% 5==0)92數據計算題目:計算第一列數字前一個與后一個的差值難度:??R語言解法df?%>%
??summarise(col1 - lag(col1)) %>%
??na.omit(.) # 不去NA也可以,pandas沒有去除93數據處理題目:將col1,col2,clo3三列順序顛倒難度:??R語言解法df?%>%
??select(col3,col2,everything())94數據提取題目:提取第一列位置在1,10,15的數字難度:??R語言解法df[c(1,10,15) + 1,1]95數據查找題目:查找第一列的局部最大值位置難度:????備注即比它前一個與后一個數字的都大的數字R語言解法res1 0))
res2 0))

intersect(res1,res2)
# [1] 3 5 7 12 14 17 19

# 另一種方法,類似pandas的用符號判斷

res
which(res - lag(res) == -2) - 1
# # [1] 3 5 7 12 14 17 1996數據計算題目:按行計算df的每一行均值難度:??R語言解法rowMeans(df)97數據計算題目:對第二列計算移動平均值難度:???備注每次移動三個位置,不可以使用自定義函數R語言解法library(RcppRoll)

df?%>%
??summarise(avg_3 = roll_mean(col2, n=3))98數據修改題目:將數據按照第三列值的大小升序排列難度:??R語言解法df %
??arrange(col3)99數據修改題目:將第一列大于50的數字修改為'高'難度:??R語言解法df[df$col1 > 50,1] '高'100數據計算題目:計算第一列與第二列之間的歐式距離難度:???備注不可以使用自定義函數R語言解法# 可以利用概念計算
res 2
sqrt(sum(res))
# [1] 197.0102

# 也可以利用dist函數,但需要形成兩個不同的觀測
dist(rbind(df$col1,df$col2))
# 1
# 2 197.0102101數據讀取題目:從CSV文件中讀取指定數據難度:??備注從數據1中的前10行中讀取positionName, salary兩列R語言解法#一步讀取文件的指定列用readr包或者原生函數都沒辦法
#如果文件特別大又不想全部再選指定列可以用如下辦法
#基本思想先讀取較少的數據獲取列名
#給目標列以外的列打上NULL導致第二次讀取文件時NULL列丟失即可

res '數據1.csv',encoding = 'GBK',nrows = 3)
classes class)
classes[-match(c('positionName','salary'),names(classes))] ??rep('NULL', length(classes)?- 2)

df?read.csv('數據1.csv',encoding = 'GBK',nrows = 10,
???????????????colClasses = classes)102數據讀取題目:從CSV文件中讀取指定數據難度:??備注從數據2中讀取數據并在讀取數據時將薪資大于10000的為改為高R語言解法library(readr)

df2 '數據2.csv') %>%
??mutate('學歷要求',
?????????'薪資水平'?= ifelse(
???????????薪資水平 > 10000,'高','低'))103數據計算題目:從dataframe提取數據難度:???備注從上一題數據中,對薪資水平列每隔20行進行一次抽樣

期望結果

R語言解法df2[seq(1,dim(df2)[1],20),]104數據處理題目:將數據取消使用科學計數法難度:??輸入df?= pd.DataFrame(np.random.random(10)**10, columns=['data'])

期望結果

R語言解法

df 10)^10)
round(df,3)105數據處理題目:將上一題的數據轉換為百分數難度:???期望結果

R語言解法tibble(data = str_glue('{round(df$data * 100,2)}%'))106數據查找題目:查找上一題數據中第3大值的行號難度:???R語言解法df?%>%
??mutate(nrow = rownames(.)) %>%
??arrange(desc(data)) %>%
??filter(row_number() == 3) %>%
??select(nrow)107數據處理題目:反轉df的行難度:??R語言解法df?%>%
??arrange(desc(rownames(.)))108數據重塑題目:按照多列對數據進行合并難度:??df1= pd.DataFrame({'key1': ['K0',?'K0',?'K1',?'K2'],
'key2': ['K0',?'K1',?'K0',?'K1'],
'A': ['A0',?'A1',?'A2',?'A3'],
'B': ['B0',?'B1',?'B2',?'B3']})

df2= pd.DataFrame({'key1': ['K0',?'K1',?'K1',?'K2'],
'key2': ['K0',?'K0',?'K0',?'K0'],
'C': ['C0',?'C1',?'C2',?'C3'],
'D': ['D0',?'D1',?'D2',?'D3']})R語言解法df1 ??"key1"?= c("K0","K0","K1","K2"),
??"key2"?= c("K0","K1","K0","K1"),
??"A"?= paste0('A',0:3),
??"B"?= paste0('B',0:3)
)

df2 ??"key1"?= c("K0","K1","K1","K2"),
??"key2"?= paste0('K',rep(0,4)),
??"C"?= paste0('C',0:3),
??"D"?= paste0('D',0:3)
)

full_join(df1,df2,by?= c('key1','key2')) %>%
??na.omit(.)109數據重塑題目:按照多列對數據進行合并難度:??

備注

只保存df1的數據

R語言解法left_join(df1,df2,by?= c('key1','key2'))110數據處理題目:再次讀取數據1并顯示所有的列難度:??備注數據中由于列數較多中間列不顯示R語言解法df '數據1.csv', locale = locale(encoding = "GBK")) %>%
??print(width = Inf)111數據查找題目:查找secondType與thirdType值相等的行號難度:??R語言解法df?%>%
??mutate(nrow = rownames(.)) %>%
??filter(secondType == thirdType) %>%
??select(nrow) %>%
??unlist()112數據查找題目:查找薪資大于平均薪資的第三個數據難度:???R語言解法df %>%
??mutate(nrow = rownames(.)) %>%
??filter(salary > mean(salary)) %>%
??select(nrow) %>%
??filter(row_number() == 3)
# # A tibble: 1 x 1
# nrow
#
# 1 6113數據計算題目:將上一題數據的salary列開根號難度:??R語言解法df %>%
??summarise(salary_sqrt = sqrt(salary))114數據處理題目:將上一題數據的linestaion列按_拆分難度:??R語言解法df %
??mutate(split?= str_split(linestaion,'_'))115數據查看題目:查看上一題數據中一共有多少列難度:?R語言解法length(df)
# [1] 54116數據提取題目:提取industryField列以'數據'開頭的行難度:??R語言解法df[grep("^數據", df$industryField),]117數據計算題目:以salary score 和 positionID制作數據透視難度:???R語言解法df %
??group_by(positionId) %>%
??dplyr::summarise(salary = mean(salary),
????????????score = mean(score)) %>%
??as.data.frame(.)
rownames(df) NULL
tibble::column_to_rownames(df,var='positionId')118數據計算題目:同時對salary、score兩列進行計算難度:???R語言解法res?%
??select(salary,score) %>%
??pivot_longer(c(salary,score),names_to = 'type',values_to = 'value') %>%
??group_by(type) %>%
??summarise(sum = sum(value),mean = mean(value),min?= min(value))

rownames(res)
res?%>%
??column_to_rownames('type') %>%
??t(.)119數據計算題目:對不同列執行不同的計算難度:???備注對salary求平均,對score列求和R語言解法df?%>%
??summarise(salary_sum = sum(salary),
????????????score_mean = mean(score))120數據計算題目:計算并提取平均薪資最高的區難度:????R語言解法df?%>%
??group_by(district) %>%
??summarise(avg = mean(salary)) %>%
??arrange(desc(avg)) %>%
??filter(row_number() == 1)

以上就是玩轉數據處理120題|R語言版全部內容,如果能堅持走到這里的讀者,我想你已經掌握了處理數據的常用操作,并且在之后的數據分析中碰到相關問題,希望你能夠從容的解決!

R語言解法作者介紹:陳熹,中山大學中山眼科中心博士在讀,不安分的python R SQL愛好者

興趣范圍:生物信息 / 數據分析 / 網絡爬蟲 / 機器學習

簡書:半為花間酒

Email:chenx6542@foxmail.com

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的go语言csv包_玩转数据处理120题R语言版本的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。