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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

50万数据生成6位数不重复字符串_R语言系列3:高级数据管理

發(fā)布時間:2023/12/4 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 50万数据生成6位数不重复字符串_R语言系列3:高级数据管理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

R語言系列3:高級數(shù)據(jù)管理


此文內(nèi)容為《R語言實(shí)戰(zhàn)》的筆記,人民郵電出版社出版。

從高中電腦課學(xué)VB開始,大一課內(nèi)開始學(xué)習(xí)C++,到后來大二為了數(shù)模學(xué)習(xí)Matlab,到大三為了搞深度學(xué)習(xí)自學(xué)Python,到研究生之初學(xué)習(xí)Stata——選擇一門語言對我來說就像是小時候玩冒險島,到10級的時候是轉(zhuǎn)戰(zhàn)士好還是弓箭手好一般的糾結(jié)。我查閱了很多B乎的文章,最后覺得可能R比較合適現(xiàn)在的我。

作為從Python轉(zhuǎn)進(jìn)來R的新手,我把可能會用經(jīng)常需要用到或經(jīng)常需要查閱的代碼貼上來,主要是為了日后方便查找,就像“字典”一樣。推文的順序與教材不同,為了簡潔,我還會刪除一些我個人認(rèn)為不太重要的章節(jié)。我還會按照自己的學(xué)習(xí)進(jìn)度發(fā)布文章,請讀者見諒。

本文章僅供學(xué)習(xí)參考,請勿轉(zhuǎn)載,侵刪!


目錄

  • 5 高級數(shù)據(jù)管理
    • 5.2 ?數(shù)值和字符串處理函數(shù)
      • 5.2.1 ?數(shù)學(xué)函數(shù)
      • 5.2.2 ?統(tǒng)計函數(shù)
      • 5.2.3 ?概率函數(shù)
      • 5.2.4 ?字符處理函數(shù)
      • 5.2.5 ?其他實(shí)用函數(shù)
    • 5.4 ?控制流
      • 5.4.1 ?循環(huán)結(jié)構(gòu)
      • 5.4.2 ?判斷結(jié)構(gòu)
      • 5.4.3 ?用戶自定義函數(shù)
    • 5.6 ?整合與重構(gòu)
      • 5.6.1 ?數(shù)據(jù)集的轉(zhuǎn)置
      • 5.6.2 ?整合數(shù)據(jù)
      • 5.6.3 ?reshape2包

第5章 高級數(shù)據(jù)管理

在第4章,我們學(xué)習(xí)了R中基本的數(shù)據(jù)處理方法。在第5章,我們主要瀏覽R中的多種數(shù)學(xué)、統(tǒng)計和字符處理函數(shù),了解如何自己編寫函數(shù)來實(shí)現(xiàn)數(shù)據(jù)處理和分析任務(wù),并了解數(shù)據(jù)的整合和概述方法以及數(shù)據(jù)集的重塑和重構(gòu)。

5.2 數(shù)值和字符處理函數(shù)

R中作為數(shù)據(jù)處理基石的函數(shù),可以分為數(shù)值函數(shù)(數(shù)學(xué)、統(tǒng)計、概率)和字符串處理函數(shù)

5.2.1 數(shù)學(xué)函數(shù)

R中常用的數(shù)學(xué)函數(shù)有:

== 函數(shù) == == 描述 ==abs(x) 絕對值sqrt(x) 平方根ceiling(x) 不小于x的最小整數(shù)floor(x) 不大于x的最大整數(shù)trunc(x) 向0方向取整round(x, digits=n) 將x舍入為指定小數(shù)位數(shù)signif(x, digits=n) 將x舍入為指定的有效數(shù)字位數(shù)cos(x),sin(x),tan(x) 三角函數(shù)acos(x),asin(x),... 反三角函數(shù)cosh(x),sinh(x),... 雙曲三角函數(shù)acosh(x),... 反雙曲三角函數(shù)log(x, base=n) 對x取n為底數(shù)的對數(shù)log(x) 自然對數(shù)log10(x) 常用對數(shù)exp(x) 自然指數(shù)

對數(shù)據(jù)做變換是這些函數(shù)的主要用途。這些函數(shù)作用于vector或matrix或data.frame對象會作用于每一個獨(dú)立的值,見:

V1 = c(1:10)V2 = c(11:20)M = matrix(V1, nrow = 2)D = data.frame(V1, V2)sqrt(V1)## [1] 1.000000 1.414214 1.732051 2.000000 2.236068 2.449490 2.645751 2.828427## [9] 3.000000 3.162278sqrt(M)## [,1] [,2] [,3] [,4] [,5]## [1,] 1.000000 1.732051 2.236068 2.645751 3.000000## [2,] 1.414214 2.000000 2.449490 2.828427 3.162278sqrt(D)## V1 V2## 1 1.000000 3.316625## 2 1.414214 3.464102## 3 1.732051 3.605551## 4 2.000000 3.741657## 5 2.236068 3.872983## 6 2.449490 4.000000## 7 2.645751 4.123106## 8 2.828427 4.242641## 9 3.000000 4.358899## 10 3.162278 4.472136

5.2.2 統(tǒng)計函數(shù)

常用的統(tǒng)計函數(shù)如表所示:

== 函數(shù) == == 描述 ==mean(x) 平均值median(x) 中位數(shù)sd(x) 樣本標(biāo)準(zhǔn)差 (用n-1)var(x) 樣本方差 (用n-1)mad(x) 絕對中位數(shù)quantile(x, probs) 求分位數(shù)range(x) 求值域sum(x) 求和diff(x, lag=n) n階差分min(x) 最小值max(x) 最大值scale(x, 數(shù)據(jù)中心化(center=TRUE) cener=TRUE, 數(shù)據(jù)標(biāo)準(zhǔn)化(center和scale=TRUE) scale=TRUE)

上面的函數(shù)一般會有na.rm選項(xiàng),當(dāng)na.rm=TRUE時會排除缺失值進(jìn)行計算。具體請參考help(·)。

一個具體的應(yīng)用是:

x mean(x)## [1] 4.5sd(x)## [1] 2.44949

如果冗余地寫,那么有:

x n meanx css sdx meanx## [1] 4.5sdx## [1] 2.44949

5.2.3 概率函數(shù)

概率函數(shù)通常用來生成特征已知的模擬數(shù)據(jù),以及在用于編寫的統(tǒng)計函數(shù)中計算概率值。

在R中,概率函數(shù)形如:

[dpqr]分布名縮寫()

其中:

  • d = 概率密度函數(shù)(pdf, density的d)
  • p = 累積分布函數(shù)(cdf, 給定分位點(diǎn)求概率p(X<=x)的p)
  • q = 分位數(shù)函數(shù)(quantile function的q,給定概率p求分位數(shù)數(shù),是p的反函數(shù))
  • r = 生成隨機(jī)數(shù)(random)

例如:

x pdf cdf quan layout(matrix(c(1,2,3,3), 2, 2))plot(x, pdf, title("dnorm"))plot(x, cdf, title("pnorm"))plot(pretty(c(0,1), 100), quan, title("qnorm"))

另外:

# 位于 z=1.96 左側(cè)的標(biāo)準(zhǔn)正態(tài)分布pdf下方的面積是多少(知道分位點(diǎn)求概率)pnorm(1.96)## [1] 0.9750021# 標(biāo)準(zhǔn)正態(tài)分布的0.9分位點(diǎn)值為多少(知道概率求分位點(diǎn))qnorm(0.9750021)## [1] 1.96

關(guān)于畫圖的命令會在下一篇推文介紹。

1.關(guān)于設(shè)定隨機(jī)種子

每次生成為隨機(jī)數(shù)的時候,函數(shù)都會使用一個不同的種子,因此也會產(chǎn)生不同的結(jié)果。你可以通過set.seed()指定某個種子,讓隨機(jī)的結(jié)果可以重現(xiàn)(reproducible),見:

runif(5)## [1] 0.9580880 0.9346797 0.5693708 0.6829771 0.6390400runif(5)## [1] 0.2776539 0.6784761 0.8737694 0.8826680 0.9218422set.seed(1234)runif(5)## [1] 0.1137034 0.6222994 0.6092747 0.6233794 0.8609154set.seed(1234)runif(5)## [1] 0.1137034 0.6222994 0.6092747 0.6233794 0.8609154

2.多元正態(tài)數(shù)據(jù)

在模擬研究和蒙特卡洛方法中,你經(jīng)常需要獲取來自給定均值向量和協(xié)方差的多元正態(tài)分布的數(shù)據(jù)。

MASS包中的mvrnorm()可以讓這個問題變得容易,請先安裝MASS包:

install.packages("MASS")

然后可以使用:

library(MASS)## Warning: package 'MASS' was built under R version 4.0.2options(digits = 3)set.seed(1234)mean sigma 6721.2, 4700.9, -16.5, -47.1, -16.5, .3), nrow = 3, ncol = 3)mydata mydata names(mydata) mydata## Y X1 X2## 1 74.5 90.43 4.16## 2 248.2 196.43 3.46## 3 351.0 236.71 3.15## 4 -56.3 4.26 4.62## 5 299.3 138.24 3.04## 6 291.0 179.52 2.88## 7 151.6 129.12 4.10## 8 148.4 144.53 3.54## 9 147.5 140.93 3.92## 10 161.4 9.96 3.21

5.2.4 字符處理函數(shù)

數(shù)學(xué)和統(tǒng)計函數(shù)是用來處理數(shù)值型數(shù)據(jù)的,而字符處理函數(shù)可以從文本中抽取需要的數(shù)據(jù)信息。常見的字符串處理函數(shù)有:

== 函數(shù) == == 描述 ==nchar(x) 計算x中的字符數(shù)量substr(x,start,end) 提取或替換字符串中的子串grep(pattern,x) 在x中搜索某種模式sub(pattern, 把x中pattern替換為replacement replacement, x)strsplit(x, split) 在split處分割向量x的元素paste(...,sep="") 連接字符串,分隔符為sep toupper(x) 大寫轉(zhuǎn)換tolower(x) 小寫轉(zhuǎn)換

具體的函數(shù)形式請參考help文檔。

5.2.5 其他實(shí)用函數(shù)

== 函數(shù) == == 描述 ==length(x) 對象x的長度seq(from,to,by) 生成從from到to間隔為by的序列rep(x,n) 重復(fù)x序列n次cut(x,n) 將連續(xù)型變量x分割為有n個水平的因子pretty(x,n) 將連續(xù)變量x均勻劃分為n個區(qū)間cat(..., 連接...中的對象,并輸出到屏幕或file中 file="myfile", append=FALSE)

使用上面的函數(shù)時,請先查看help獲取詳細(xì)信息。

另外,字符串里面該可以使用以下轉(zhuǎn)義字符:

== 字符 == == 描述 ==\n 換行符(回車)\t 制表符(tab)\' 單引號\b 退格可以在Console輸入 ?Quotes 了解更多

例如:

name cat("Hello", name, "\b.\n", "Isn\'t R", "\t", "GREAT?\n")## Hello Bob .## Isn't R GREAT?

在這里,使用\b是因?yàn)閏at在連接對象時,每個對象都會用空格分開。句號和最后一個單詞之間不需要空格,所以先用\b再輸入.消除不要的空格。


5.4 控制流

在這里介紹控制流,即判斷和循環(huán)結(jié)構(gòu)。

5.4.1 循環(huán)結(jié)構(gòu)

1. for循環(huán)

用for循環(huán)重復(fù)執(zhí)行語句,知道某個變量的值不在包含在序列seq中為止,語法是:

for (var in seq) {statement}

例如:

for (i in 1:3) {print("Hello world!")}## [1] "Hello world!"## [1] "Hello world!"## [1] "Hello world!"

2. while循環(huán)

while循環(huán)地重復(fù)執(zhí)行一條語句,知道條件不為真為止,語法是:

while (cond) {statement}

例如:

i while (i>0) {print("Hello world"); i ## [1] "Hello world"## [1] "Hello world"## [1] "Hello world"

5.4.2 判斷結(jié)構(gòu)

1. if-else 結(jié)構(gòu)

語法為:

if (cond) {statement}if (cond) {statement1} else {statement2}

2. ifelse 結(jié)構(gòu)

語法是:

ifelse(cond, statement1, statement2)

如果cond為真,那么執(zhí)行statement1,否則執(zhí)行statement2。例如:

ifelse(1>2, {"1更大"}, {"2更大"})## [1] "2更大"

如果程序的行為是二元的,或者希望input和output均為向量時,盡量使用ifelse結(jié)構(gòu)

3. switch結(jié)構(gòu)

語法是:

switch(expr, ...)

其中,...表示與expr的各種輸出值綁定的語句。看下面的代碼就一目了然了:

fellings for (i in fellings){ print( switch (i, happy = "I am glad you are happy!", afraid = "There is nothing to fear.", sad = "Cheer up!", angry = "Calm down now." ) )}## [1] "Cheer up!"## [1] "There is nothing to fear."

5.4.3 用戶自編函數(shù)

R最大的優(yōu)點(diǎn)之一就是用戶可以自行添加函數(shù)。一個函數(shù)的基本結(jié)構(gòu)的語法是:

myfunction statements return(object)}

函數(shù)的對象只能在內(nèi)部使用,返回的對象的數(shù)據(jù)類型是任意的,從標(biāo)量到列表都可以。比如:

judge return(ifelse(num1>num2, num1, num2))}judge(4,100)## [1] 100

5.6 整合與重構(gòu)

R提供了很多方法用來整合(aggregate)和重構(gòu)(reshape)數(shù)據(jù)。后面將使用在R基本安裝中的mtcars數(shù)據(jù)框:

mtcars[1:3,1:3]## mpg cyl disp## Mazda RX4 21.0 6 160## Mazda RX4 Wag 21.0 6 160## Datsun 710 22.8 4 108

5.6.1 數(shù)據(jù)集的轉(zhuǎn)置

轉(zhuǎn)置即反轉(zhuǎn)行和列,直接使用t()就可以直接對一個矩陣或一個數(shù)據(jù)框進(jìn)行轉(zhuǎn)置了。對于數(shù)據(jù)框,行名將變成列名。如果是對向量進(jìn)行t()函數(shù),那么第一次t()會把向量變成一維矩陣,第二次t(t(·))才會轉(zhuǎn)置。例如:

V class(V)## [1] "integer"class(t(V))## [1] "matrix" "array"M t(M)## [,1] [,2]## [1,] 1 2## [2,] 3 4## [3,] 5 6t(mtcars[1:3,1:3])## Mazda RX4 Mazda RX4 Wag Datsun 710## mpg 21 21 22.8## cyl 6 6 4.0## disp 160 160 108.0

5.6.2 整合數(shù)據(jù)

在R中使用一個或多個by和一個預(yù)先定義好的函數(shù)來折疊(collapse)數(shù)據(jù)是比較容易的,語法是:

aggregate(x, by=list(...), FUN)

其中x是待折疊的對象;by是一個變量名組成的列表;FUN是預(yù)先定義好的用來計算描述性統(tǒng)計量的標(biāo)量函數(shù)

例如,我們根據(jù)氣缸數(shù)(cyl)和檔位數(shù)(gear)整合mtcars數(shù)據(jù),并返回個數(shù)值型變量的均值:

options(digits = 3)attach(mtcars)aggdata aggdata## Group.1 Group.2 mpg cyl disp hp drat wt qsec vs am gear carb## 1 4 3 21.5 4 120 97 3.70 2.46 20.0 1.0 0.00 3 1.00## 2 6 3 19.8 6 242 108 2.92 3.34 19.8 1.0 0.00 3 1.00## 3 8 3 15.1 8 358 194 3.12 4.10 17.1 0.0 0.00 3 3.08## 4 4 4 26.9 4 103 76 4.11 2.38 19.6 1.0 0.75 4 1.50## 5 6 4 19.8 6 164 116 3.91 3.09 17.7 0.5 0.50 4 4.00## 6 4 5 28.2 4 108 102 4.10 1.83 16.8 0.5 1.00 5 2.00## 7 6 5 19.7 6 145 175 3.62 2.77 15.5 0.0 1.00 5 6.00## 8 8 5 15.4 8 326 300 3.88 3.37 14.6 0.0 1.00 5 6.00

其中,Group.1表示氣缸數(shù)(4、6、8);Group.2表示檔位數(shù)(3、4、5)。這里返回的列表表示,

  • 平均來看,有4個氣缸,3個檔位的的車型每加侖汽油行駛英里數(shù)(mpg)為21.5

你也可以在by=list()中指定變量的名稱,比如:

options(digits = 3)attach(mtcars)## The following objects are masked from mtcars (pos = 3):## ## am, carb, cyl, disp, drat, gear, hp, mpg, qsec, vs, wtaggdata aggdata## Group.cyl Group.gears mpg cyl disp hp drat wt qsec vs am gear carb## 1 4 3 21.5 4 120 97 3.70 2.46 20.0 1.0 0.00 3 1.00## 2 6 3 19.8 6 242 108 2.92 3.34 19.8 1.0 0.00 3 1.00## 3 8 3 15.1 8 358 194 3.12 4.10 17.1 0.0 0.00 3 3.08## 4 4 4 26.9 4 103 76 4.11 2.38 19.6 1.0 0.75 4 1.50## 5 6 4 19.8 6 164 116 3.91 3.09 17.7 0.5 0.50 4 4.00## 6 4 5 28.2 4 108 102 4.10 1.83 16.8 0.5 1.00 5 2.00## 7 6 5 19.7 6 145 175 3.62 2.77 15.5 0.0 1.00 5 6.00## 8 8 5 15.4 8 326 300 3.88 3.37 14.6 0.0 1.00 5 6.00

5.6.3 reshape2包

reshape2包是一套重構(gòu)和整合數(shù)據(jù)集的萬能工具,但用起來有點(diǎn)復(fù)雜。我們首先要安裝reshape2包:

install.packages("reshape2")

然后用下面的例子來簡要介紹reshape2包。

ID Time X1 X2 mydata mydata## ID Time X1 X2## 1 1 1 5 6## 2 1 2 3 5## 3 2 1 6 1## 4 2 2 2 4

1. 融合

數(shù)據(jù)集的融合是將其重構(gòu)為這樣的格式:

每個測量變量獨(dú)占一行,行中帶有唯一確定這個測量所需的標(biāo)識符變量

上面的mydata可以使用下面的代碼進(jìn)行重構(gòu):

library(reshape2)## Warning: package 'reshape2' was built under R version 4.0.2md md## ID Time variable value## 1 1 1 X1 5## 2 1 2 X1 3## 3 2 1 X1 6## 4 2 2 X1 2## 5 1 1 X2 6## 6 1 2 X2 5## 7 2 1 X2 1## 8 2 2 X2 4

注意,必須指定唯一確定每個變量所需的變量(在這里是ID和Time),而表示測量變量名的變量(X1, X2)將由程序?yàn)槟阕詣觿?chuàng)建。

2. 重構(gòu)

使用dcast()命令重構(gòu)融合后的數(shù)據(jù),并使用你提供的一個公式和一個(可選的)用于整個數(shù)據(jù)的函數(shù)將其重構(gòu),調(diào)用的語法是:

newdata

在這里,md是已經(jīng)融合的數(shù)據(jù);formula描述了想要的最后結(jié)果;fun.aggregate是數(shù)據(jù)整合函數(shù)。其中,formula的格式為

rowvar1 + rowvar2 + ... ~ colvar1 + colvar2 + ...

其中,rowvar1 + rowvar2 + ...定義了行標(biāo)簽,以確定各行的內(nèi)容;colvar1 + colvar2 + ...則列表標(biāo)簽,定義了各列的內(nèi)容,比如:

dcast(md, ID+Time~variable)## ID Time X1 X2## 1 1 1 5 6## 2 1 2 3 5## 3 2 1 6 1## 4 2 2 2 4dcast(md, ID+variable~Time)## ID variable 1 2## 1 1 X1 5 3## 2 1 X2 6 5## 3 2 X1 6 2## 4 2 X2 1 4 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的50万数据生成6位数不重复字符串_R语言系列3:高级数据管理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。