一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

R語言數(shù)據(jù)處理包dplyr、tidyr筆記

 醫(yī)學(xué)數(shù)據(jù)科學(xué) 2020-04-23

dplyr包是Hadley Wickham的新作,主要用于數(shù)據(jù)清洗和整理,該包專注dataframe數(shù)據(jù)格式,從而大幅提高了數(shù)據(jù)處理速度,并且提供了與其它數(shù)據(jù)庫的接口;tidyr包的作者是Hadley Wickham, 該包用于“tidy”你的數(shù)據(jù),這個(gè)包常跟dplyr結(jié)合使用。

本文將介紹dplyr包的下述五個(gè)函數(shù)用法:

  • 篩選: filter()

  • 排列: arrange()

  • 選擇: select()

  • 變形: mutate()

  • 匯總: summarise()

  • 分組: group_by()

以及tidyr包的下述四個(gè)函數(shù)用法:

  • gather—寬數(shù)據(jù)轉(zhuǎn)為長數(shù)據(jù);

  • spread—長數(shù)據(jù)轉(zhuǎn)為寬數(shù)據(jù);

  • unit—多列合并為一列;

  • separate—將一列分離為多列;

dplyr、tidyr包安裝及載入

install.packages("dplyr")install.packages("tidyr")library(dplyr)library(tidyr)

使用datasets包中的mtcars數(shù)據(jù)集做演示,首先將過長的數(shù)據(jù)整理成友好的tbl_df數(shù)據(jù):

mtcars_df = tbl_df(mtcars)

dplyr包基本操作

1.1 篩選: filter()

按給定的邏輯判斷篩選出符合要求的子數(shù)據(jù)集

filter(mtcars_df,mpg==21,hp==110)#  A tibble: 2 x 11
    mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>1    21     6   160   110   3.9 2.620 16.46     0     1     4     42    21     6   160   110   3.9 2.875 17.02     0     1     4     4

1.2 排列: arrange()

按給定的列名依次對(duì)行進(jìn)行排序:

arrange(mtcars_df, disp) #可對(duì)列名加 desc(disp) 進(jìn)行倒序

# A tibble: 32 x 11     mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1   33.9     4  71.1    65  4.22 1.835 19.90     1     1     4     1
2   30.4     4  75.7    52  4.93 1.615 18.52     1     1     4     2
3   32.4     4  78.7    66  4.08 2.200 19.47     1     1     4     1
4   27.3     4  79.0    66  4.08 1.935 18.90     1     1     4     1
5   30.4     4  95.1   113  3.77 1.513 16.90     1     1     5     2
6   22.8     4 108.0    93  3.85 2.320 18.61     1     1     4     1
7   21.5     4 120.1    97  3.70 2.465 20.01     1     0     3     1
8   26.0     4 120.3    91  4.43 2.140 16.70     0     1     5     2
9   21.4     4 121.0   109  4.11 2.780 18.60     1     1     4     2
10  22.8     4 140.8    95  3.92 3.150 22.90     1     0     4     2
# ... with 22 more rows

1.3 選擇: select()

用列名作參數(shù)來選擇子數(shù)據(jù)集:

select(mtcars_df, disp:wt)# A tibble: 32 x 4    disp    hp  drat    wt*  <dbl> <dbl> <dbl> <dbl>
1  160.0   110  3.90 2.6202  160.0   110  3.90 2.8753  108.0    93  3.85 2.3204  258.0   110  3.08 3.2155  360.0   175  3.15 3.4406  225.0   105  2.76 3.4607  360.0   245  3.21 3.5708  146.7    62  3.69 3.1909  140.8    95  3.92 3.15010 167.6   123  3.92 3.440# ... with 22 more rows

1.4 變形: mutate()

對(duì)已有列進(jìn)行數(shù)據(jù)運(yùn)算并添加為新列:

mutate(mtcars_df,  NO = 1:dim(mtcars_df)[1])  

# A tibble: 32 x 12
     mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb    NO   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <int>1   21.0     6 160.0   110  3.90 2.620 16.46     0     1     4     4     12   21.0     6 160.0   110  3.90 2.875 17.02     0     1     4     4     23   22.8     4 108.0    93  3.85 2.320 18.61     1     1     4     1     34   21.4     6 258.0   110  3.08 3.215 19.44     1     0     3     1     45   18.7     8 360.0   175  3.15 3.440 17.02     0     0     3     2     56   18.1     6 225.0   105  2.76 3.460 20.22     1     0     3     1     67   14.3     8 360.0   245  3.21 3.570 15.84     0     0     3     4     78   24.4     4 146.7    62  3.69 3.190 20.00     1     0     4     2     89   22.8     4 140.8    95  3.92 3.150 22.90     1     0     4     2     910  19.2     6 167.6   123  3.92 3.440 18.30     1     0     4     4    10# ... with 22 more rows

1.5 匯總: summarise()

對(duì)數(shù)據(jù)框調(diào)用其它函數(shù)進(jìn)行匯總操作, 返回一維的結(jié)果:

summarise(mtcars_df, 
    mdisp = mean(disp, na.rm = TRUE))# A tibble: 1 x 1
     mdisp
     <dbl>1 230.7219

1.6 分組: group_by()

當(dāng)對(duì)數(shù)據(jù)集通過group_by()添加了分組信息后,mutate(),arrange() 和 summarise() 函數(shù)會(huì)自動(dòng)對(duì)這些 tbl 類數(shù)據(jù)執(zhí)行分組操作。

cars <- group_by(mtcars_df, cyl)countcars <- summarise(cars, count = n()) # count = n()用來計(jì)算次數(shù)# A tibble: 3 x 2
    cyl count
  <dbl> <int>1     4    11
2     6     7
3     8    14

tidyr包基本操作

2.1 寬轉(zhuǎn)長:gather()

使用gather()函數(shù)實(shí)現(xiàn)寬表轉(zhuǎn)長表,語法如下:

gather(data, key, value, …, na.rm = FALSE, convert = FALSE)data:需要被轉(zhuǎn)換的寬形表key:將原數(shù)據(jù)框中的所有列賦給一個(gè)新變量keyvalue:將原數(shù)據(jù)框中的所有值賦給一個(gè)新變量value
…:可以指定哪些列聚到同一列中na.rm:是否刪除缺失值widedata <- data.frame(person=c('Alex','Bob','Cathy'),grade=c(2,3,4),score=c(78,89,88))widedata
  person grade score1   Alex     2    782    Bob     3    893  Cathy     4    88longdata <- gather(widedata, variable, value,-person)longdata
  person variable value1   Alex    grade     22    Bob    grade     33  Cathy    grade     44   Alex    score    785    Bob    score    896  Cathy    score    88

2.2 長轉(zhuǎn)寬:spread()

有時(shí),為了滿足建?;蚶L圖的要求,往往需要將長形表轉(zhuǎn)換為寬形表,或?qū)捫伪碜優(yōu)殚L形表。如何實(shí)現(xiàn)這兩種數(shù)據(jù)表類型的轉(zhuǎn)換。使用spread()函數(shù)實(shí)現(xiàn)長表轉(zhuǎn)寬表,語法如下:

spread(data, key, value, fill = NA, convert = FALSE, drop = TRUE)data:為需要轉(zhuǎn)換的長形表key:需要將變量值拓展為字段的變量value:需要分散的值
fill:對(duì)于缺失值,可將fill的值賦值給被轉(zhuǎn)型后的缺失值

mtcarsSpread <- mtcarsNew %>% spread(attribute, value)head(mtcarsSpread)
                 car am carb cyl disp drat gear  hp  mpg  qsec vs    wt1        AMC Javelin  0    2   8  304 3.15    3 150 15.2 17.30  0 3.4352 Cadillac Fleetwood  0    4   8  472 2.93    3 205 10.4 17.98  0 5.2503         Camaro Z28  0    4   8  350 3.73    3 245 13.3 15.41  0 3.8404  Chrysler Imperial  0    4   8  440 3.23    3 230 14.7 17.42  0 5.3455         Datsun 710  1    1   4  108 3.85    4  93 22.8 18.61  1 2.3206   Dodge Challenger  0    2   8  318 2.76    3 150 15.5 16.87  0 3.520

2.3 合并:unit()

unite的調(diào)用格式如下:

unite(data, col, …, sep = “_”, remove = TRUE)data:為數(shù)據(jù)框col:被組合的新列名稱
…:指定哪些列需要被組合sep:組合列之間的連接符,默認(rèn)為下劃線remove:是否刪除被組合的列wideunite<-unite(widedata, information, person, grade, score, sep= "-")wideunite
  information1   Alex-2-782    Bob-3-893  Cathy-4-88

2.4 拆分:separate()

separate()函數(shù)可將一列拆分為多列,一般可用于日志數(shù)據(jù)或日期時(shí)間型數(shù)據(jù)的拆分,語法如下:

separate(data, col, into, sep = “[^[:alnum:]]+”, remove = TRUE,convert = FALSE, extra = “warn”, fill = “warn”, …)data:為數(shù)據(jù)框col:需要被拆分的列into:新建的列名,為字符串向量sep:被拆分列的分隔符remove:是否刪除被分割的列 

widesep <- separate(wideunite, information,c("person","grade","score"), sep = "-")widesep
  person grade score1   Alex     2    782    Bob     3    893  Cathy     4    88

可見separate()函數(shù)和unite()函數(shù)的功能相反。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    亚洲中文字幕人妻系列| 夫妻性生活动态图视频| 国产一级内片内射免费看| 欧美一级日韩中文字幕| 99热在线播放免费观看| 青青操视频在线播放免费| 国产极品粉嫩尤物一区二区| av国产熟妇露脸在线观看| 99香蕉精品视频国产版| 一区二区三区日本高清| 日韩一区二区三区有码| 欧美国产日产在线观看| 欧美日韩中国性生活视频| 国产欧美日产中文一区| 高清不卡一卡二卡区在线| 日韩一区欧美二区国产| 久久永久免费一区二区| 欧美日韩国产精品第五页| 国产av熟女一区二区三区蜜桃| 日本一二三区不卡免费| 开心久久综合激情五月天| 亚洲av熟女一区二区三区蜜桃| 好骚国产99在线中文| 国产午夜免费在线视频| 青青操视频在线观看国产| 自拍偷女厕所拍偷区亚洲综合| 91欧美一区二区三区成人| 一个人的久久精彩视频| 国产精品欧美一区两区| 国产一二三区不卡视频| 日韩欧美一区二区不卡视频| 香蕉久久夜色精品国产尤物| 高清一区二区三区大伊香蕉| 国产午夜福利不卡片在线观看| 色婷婷视频在线精品免费观看| 亚洲最大的中文字幕在线视频| 日韩一区二区三区高清在| 中文字幕人妻av不卡| 欧美乱码精品一区二区三| 欧美乱视频一区二区三区| 日韩一区二区三区高清在|