前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >R包基础实操—tidyverse包

R包基础实操—tidyverse包

作者头像
生信技能树jimmy
发布于 2021-10-11 03:20:28
发布于 2021-10-11 03:20:28
3.4K00
代码可运行
举报
文章被收录于专栏:单细胞天地单细胞天地
运行总次数:0
代码可运行

tidyverse包,分享整洁数据的基础设计理念、语法和数据结构

核心软件包是ggplot2、dplyr、tidyr、readr、purrr、tibble、stringr和forcats,它们提供了建模、转换和可视化数据的功能。

其中,readr包用于读取数据,tidyr包用于整理数据,dplyr包用于数据转换,ggplot2包用于数据可视化,purrr包用于函数式编程。

1 readr包:快速读写

1-1 readr包提供了几个新函数,能够更快的读取文件

readr包中的主要的函数有:

  • read_csvread_tsvread_tableread_delim
  • write_csvwrite_tsv, write_excel_csvwrite_delim
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(tidyverse)
library(readr)
library(feather)
library(Seurat)

metadata <- pbmc_small@meta.data

# If you add an extension to the file name, write_()* will automatically compress the output.
write_csv(metadata, 'metadata.csv')
write_tsv(metadata, 'metadata2.csv')
write_tsv(metadata, 'metadata.tsv.gz')

# write_rds()联合read_rds()使用,write_rds()将数据保存为自定义的二进制形式(RDS格式)
write_rds(metadata,"challenge.rds")
head(read_rds("challenge.rds"))
##                   orig.ident nCount_RNA nFeature_RNA RNA_snn_res.0.8
## ATGCCAGAACGACT SeuratProject         70           47               0
## CATGGCCTGTGCAT SeuratProject         85           52               0
## GAACCTGATGAACC SeuratProject         87           50               1
## TGACTGGATTCTCA SeuratProject        127           56               0
## AGTCAGACTGCACA SeuratProject        173           53               0
## TCTGATACACGTGT SeuratProject         70           48               0
##                letter.idents groups RNA_snn_res.1
## ATGCCAGAACGACT             A     g2             0
## CATGGCCTGTGCAT             A     g1             0
## GAACCTGATGAACC             B     g2             0
## TGACTGGATTCTCA             A     g2             0
## AGTCAGACTGCACA             A     g2             0
## TCTGATACACGTGT             A     g1             0

# saveRDS()联合readRDS()使用,saveRDS()将数据保存为自定义的压缩后的二进制形式(RDS格式)
saveRDS(metadata, "challenge.rds")
metadata <- readRDS("challenge.rds")

# write_rds(metadata, "compressed_mtc.rds", "xz", compression = 9L)
# write_rds(metadata,"challenge.rds", compress = 'gz') = saveRDS(metadata, "challenge.rds", compress = TRUE)

# feather包也是实现一种二进制形式,可以在多个编程语言之间共享;相比于RDS,速度更快。
write_feather(metadata,"challenge.feather")
read_feather("challenge.feather")
## # A tibble: 80 x 7
##    orig.ident    nCount_RNA nFeature_RNA RNA_snn_res.0.8 letter.idents groups
##    <fct>              <dbl>        <int> <fct>           <fct>         <chr> 
##  1 SeuratProject         70           47 0               A             g2    
##  2 SeuratProject         85           52 0               A             g1    
##  3 SeuratProject         87           50 1               B             g2    
##  4 SeuratProject        127           56 0               A             g2    
##  5 SeuratProject        173           53 0               A             g2    
##  6 SeuratProject         70           48 0               A             g1    
##  7 SeuratProject         64           36 0               A             g1    
##  8 SeuratProject         72           45 0               A             g1    
##  9 SeuratProject         52           36 0               A             g1    
## 10 SeuratProject        100           41 0               A             g1    
## # ... with 70 more rows, and 1 more variable: RNA_snn_res.1 <fct>

1-2 将R数据写入Excel

  • write.xlsx(x, file, sheetName = “Sheet1”, col.names = TRUE, row.names = TRUE, append = FALSE)
  • write.xlsx2(x, file, sheetName = “Sheet1”, col.names = TRUE, row.names = TRUE, append = FALSE)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library("xlsx")
# Write the first data set in a new workbook
write.xlsx(USArrests, file = "myworkbook.xlsx", sheetName = "USA-ARRESTS", append = FALSE)
# Add a second data set in a new worksheet
write.xlsx(mtcars, file = "myworkbook.xlsx", sheetName="MTCARS", append=TRUE)
# Add a third data set
write.xlsx(iris, file = "myworkbook.xlsx", sheetName="IRIS", append=TRUE)

2 tidyr包:整理数据

2-1 tidyr包提供了几个新函数,能够有效整理数据

  • gather(): makes “wide” data longer
  • spread(): makes “long” data wider
  • separate(): splits a single column into multiple columns
  • unite(): combines multiple columns into a single column
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(tidyr)
library(dplyr)
DF <- data.frame(Group=rep(1:3, each=4), Year=rep(2006:2009, times=3), 
                 Qtr.1 = rep(seq(14, 20, 2), 3),  Qtr.2 = rep(seq(12, 18, 2), 3),
                 Qtr.3 = rep(seq(16, 22, 2), 3),  Qtr.4 = rep(seq(18, 24, 2), 3))

long_DF <- DF %>% gather(Quarter, Revenue, Qtr.1:Qtr.4)
head(long_DF)
##   Group Year Quarter Revenue
## 1     1 2006   Qtr.1      14
## 2     1 2007   Qtr.1      16
## 3     1 2008   Qtr.1      18
## 4     1 2009   Qtr.1      20
## 5     2 2006   Qtr.1      14
## 6     2 2007   Qtr.1      16

wide_DF <- long_DF %>% spread(Quarter, Revenue)
head(wide_DF, 10)
##    Group Year Qtr.1 Qtr.2 Qtr.3 Qtr.4
## 1      1 2006    14    12    16    18
## 2      1 2007    16    14    18    20
## 3      1 2008    18    16    20    22
## 4      1 2009    20    18    22    24
## 5      2 2006    14    12    16    18
## 6      2 2007    16    14    18    20
## 7      2 2008    18    16    20    22
## 8      2 2009    20    18    22    24
## 9      3 2006    14    12    16    18
## 10     3 2007    16    14    18    20

separate_DF <- long_DF %>% separate(Quarter, c("Time_Interval", "Interval_ID"))
head(separate_DF, 10)
##    Group Year Time_Interval Interval_ID Revenue
## 1      1 2006           Qtr           1      14
## 2      1 2007           Qtr           1      16
## 3      1 2008           Qtr           1      18
## 4      1 2009           Qtr           1      20
## 5      2 2006           Qtr           1      14
## 6      2 2007           Qtr           1      16
## 7      2 2008           Qtr           1      18
## 8      2 2009           Qtr           1      20
## 9      3 2006           Qtr           1      14
## 10     3 2007           Qtr           1      16

unite_DF <- separate_DF %>% unite(Quarter, Time_Interval, Interval_ID, sep = ".")
head(unite_DF, 10)
##    Group Year Quarter Revenue
## 1      1 2006   Qtr.1      14
## 2      1 2007   Qtr.1      16
## 3      1 2008   Qtr.1      18
## 4      1 2009   Qtr.1      20
## 5      2 2006   Qtr.1      14
## 6      2 2007   Qtr.1      16
## 7      2 2008   Qtr.1      18
## 8      2 2009   Qtr.1      20
## 9      3 2006   Qtr.1      14
## 10     3 2007   Qtr.1      16

DF %>% gather(Quarter, Revenue, Qtr.1:Qtr.4) %>% head(2)
##   Group Year Quarter Revenue
## 1     1 2006   Qtr.1      14
## 2     1 2007   Qtr.1      16
DF %>% gather(Quarter, Revenue, -Group, -Year) %>% head(2)
##   Group Year Quarter Revenue
## 1     1 2006   Qtr.1      14
## 2     1 2007   Qtr.1      16
DF %>% gather(Quarter, Revenue, 3:6) %>% head(2)
##   Group Year Quarter Revenue
## 1     1 2006   Qtr.1      14
## 2     1 2007   Qtr.1      16
DF %>% gather(Quarter, Revenue, Qtr.1, Qtr.2, Qtr.3, Qtr.4) %>% head(2)
##   Group Year Quarter Revenue
## 1     1 2006   Qtr.1      14
## 2     1 2007   Qtr.1      16

long_DF %>% separate(Quarter, c("Time_Interval", "Interval_ID")) %>% head(2)
##   Group Year Time_Interval Interval_ID Revenue
## 1     1 2006           Qtr           1      14
## 2     1 2007           Qtr           1      16
long_DF %>% separate(Quarter, c("Time_Interval", "Interval_ID"), sep = "\\.") %>% head(2)
##   Group Year Time_Interval Interval_ID Revenue
## 1     1 2006           Qtr           1      14
## 2     1 2007           Qtr           1      16
separate_DF %>% unite(Quarter, Time_Interval, Interval_ID, sep = "_") %>% head(2)
##   Group Year Quarter Revenue
## 1     1 2006   Qtr_1      14
## 2     1 2007   Qtr_1      16
separate_DF %>% unite(Quarter, Time_Interval, Interval_ID) %>% head(2)
##   Group Year Quarter Revenue
## 1     1 2006   Qtr_1      14
## 2     1 2007   Qtr_1      16

3 dplyr包:有效数据操作

3-1 tidyr包提供了几个新函数,能够有效操作数据

  • filter() picks cases based on their values.
  • select() picks variables based on their names.
  • arrange() changes the ordering of the rows.
  • mutate() adds new variables that are functions of existing variables.
  • summarise() reduces multiple values down to a single summary.

Rows:

  • filter()chooses rows based on column values.
  • arrange()changes the order of the rows.
  • slice()chooses rows based on location.

Columns:

  • select()changes whether or not a column is included.
  • rename()changes the name of columns.
  • mutate()changes the values of columns and creates new columns.
  • relocate()changes the order of the columns.

Groups of rows:

  • summarise()collapses a group into a single row.
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(dplyr)
head(starwars)
## # A tibble: 6 x 14
##   name     height  mass hair_color  skin_color eye_color birth_year sex   gender
##   <chr>     <int> <dbl> <chr>       <chr>      <chr>          <dbl> <chr> <chr> 
## 1 Luke Sk~    172    77 blond       fair       blue            19   male  mascu~
## 2 C-3PO       167    75 <NA>        gold       yellow         112   none  mascu~
## 3 R2-D2        96    32 <NA>        white, bl~ red             33   none  mascu~
## 4 Darth V~    202   136 none        white      yellow          41.9 male  mascu~
## 5 Leia Or~    150    49 brown       light      brown           19   fema~ femin~
## 6 Owen La~    178   120 brown, grey light      blue            52   male  mascu~
## # ... with 5 more variables: homeworld <chr>, species <chr>, films <list>,
## #   vehicles <list>, starships <list>

starwars %>% 
  dplyr::select(name, ends_with("color"))
## # A tibble: 87 x 4
##    name               hair_color    skin_color  eye_color
##    <chr>              <chr>         <chr>       <chr>    
##  1 Luke Skywalker     blond         fair        blue     
##  2 C-3PO              <NA>          gold        yellow   
##  3 R2-D2              <NA>          white, blue red      
##  4 Darth Vader        none          white       yellow   
##  5 Leia Organa        brown         light       brown    
##  6 Owen Lars          brown, grey   light       blue     
##  7 Beru Whitesun lars brown         light       blue     
##  8 R5-D4              <NA>          white, red  red      
##  9 Biggs Darklighter  black         light       brown    
## 10 Obi-Wan Kenobi     auburn, white fair        blue-gray
## # ... with 77 more rows

starwars %>% 
  mutate(name, bmi = mass / ((height / 100)  ^ 2)) %>%
  dplyr::filter(species == "Droid") %>%
  dplyr::select(name:mass, bmi) %>%
  arrange(desc(mass))
## # A tibble: 6 x 4
##   name   height  mass   bmi
##   <chr>   <int> <dbl> <dbl>
## 1 IG-88     200   140  35  
## 2 C-3PO     167    75  26.9
## 3 R2-D2      96    32  34.7
## 4 R5-D4      97    32  34.0
## 5 R4-P17     96    NA  NA  
## 6 BB8        NA    NA  NA

starwars %>%
  group_by(species) %>%
  summarise(n = n(), mass = mean(mass, na.rm = TRUE)) %>%
  filter(n > 1, mass > 50)
## # A tibble: 8 x 3
##   species      n  mass
##   <chr>    <int> <dbl>
## 1 Droid        6  69.8
## 2 Gungan       3  74  
## 3 Human       35  82.8
## 4 Kaminoan     2  88  
## 5 Mirialan     2  53.1
## 6 Twi'lek      2  55  
## 7 Wookiee      2 124  
## 8 Zabrak       2  80

4 purrr包:函数式编程

用R写循环从低到高有三种境界:手动 for 循环,apply 函数族,purrr 包泛函式编程。

  • map(.x, .f, …): Apply a function to each element of a list or vector. map(x, is.logical)
  • map2(.x, .y, .f, …): Apply a function to pairs of elements from two lists, vectors. map2(x, y, sum)
  • pmap(.l, .f, …): Apply a function to groups of elements from list of lists, vectors. pmap(list(x, y, z), sum, na.rm = TRUE)

purrr包讲解

map系列函数的返回值如下:

  • map_chr(.x, .f): 返回字符型向量
  • map_lgl(.x, .f): 返回逻辑型向量
  • map_dbl(.x, .f): 返回实数型向量
  • map_int(.x, .f): 返回整数型向量
  • map_dfr(.x, .f): 返回数据框列表,再 bind_rows 按行合并为一个数据框
  • map_dfc(.x, .f): 返回数据框列表,再 bind_cols 按列合并为一个数据框
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(purrr)

infos <- tibble(
  born=c(1990, 1992, 2000, 1985), 
  family=c("张", "李", "王", "赵"),
  name=c("三", "四", "五", "六"))
infos
## # A tibble: 4 x 3
##    born family name 
##   <dbl> <chr>  <chr>
## 1  1990 张     三   
## 2  1992 李     四   
## 3  2000 王     五   
## 4  1985 赵     六
infos2 <- infos

age <- purrr::map(infos$born, function(x){2020-x}) %>% unlist()
infos$age <- age
infos
## # A tibble: 4 x 4
##    born family name    age
##   <dbl> <chr>  <chr> <dbl>
## 1  1990 张     三       30
## 2  1992 李     四       28
## 3  2000 王     五       20
## 4  1985 赵     六       35

fullname <- purrr::map2(infos$family, infos$name, function(x, y){paste0(x,y)}) %>% unlist()
infos$fullname <- fullname
infos
## # A tibble: 4 x 5
##    born family name    age fullname
##   <dbl> <chr>  <chr> <dbl> <chr>   
## 1  1990 张     三       30 张三    
## 2  1992 李     四       28 李四    
## 3  2000 王     五       20 王五    
## 4  1985 赵     六       35 赵六

fullname <- purrr::pmap(list(x=infos$family, y=infos$name, z=infos$born), function(x, y, z) paste0(x, y, z)) %>% unlist()
infos$fullname2 <- fullname
infos
## # A tibble: 4 x 6
##    born family name    age fullname fullname2
##   <dbl> <chr>  <chr> <dbl> <chr>    <chr>    
## 1  1990 张     三       30 张三     张三1990 
## 2  1992 李     四       28 李四     李四1992 
## 3  2000 王     五       20 王五     王五2000 
## 4  1985 赵     六       35 赵六     赵六1985

# 
purrr::pmap(list(x=infos$born), function(x){2020-x}) %>% unlist()
## [1] 30 28 20 35
purrr::pmap(list(x=infos$born, y=infos$name), function(x, y){paste0(x,y)}) %>% unlist()
## [1] "1990三" "1992四" "2000五" "1985六"
purrr::pmap(list(x=infos$family, y=infos$name, z=infos$born), function(x, y, z) paste0(x, y, z)) %>% unlist()
## [1] "张三1990" "李四1992" "王五2000" "赵六1985"

names(infos2) <- c('x', 'y', 'z')
infos2
## # A tibble: 4 x 3
##       x y     z    
##   <dbl> <chr> <chr>
## 1  1990 张    三   
## 2  1992 李    四   
## 3  2000 王    五   
## 4  1985 赵    六

purrr::pmap(infos2['x'], function(x){2020-x}) %>% unlist()
## [1] 30 28 20 35
purrr::pmap(infos2[c('x', 'y')], function(x, y){paste0(x,y)}) %>% unlist()
## [1] "1990张" "1992李" "2000王" "1985赵"
purrr::pmap(infos2, function(x, y, z){paste0(x,y, z)}) %>% unlist()
## [1] "1990张三" "1992李四" "2000王五" "1985赵六"

比较匿名函数和公式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df <- mtcars %>% 
  dplyr::select(mpg, cyl, wt) %>% 
  group_nest(cyl) 

# formula
df %>% mutate(model = map(data, ~ lm(mpg ~ wt, data = .x) ))
## # A tibble: 3 x 3
##     cyl               data model 
##   <dbl> <list<tibble[,2]>> <list>
## 1     4           [11 x 2] <lm>  
## 2     6            [7 x 2] <lm>  
## 3     8           [14 x 2] <lm>
map_dbl(mtcars, ~ length(unique(.x)))
##  mpg  cyl disp   hp drat   wt qsec   vs   am gear carb 
##   25    3   27   22   22   29   30    2    2    3    6

# anonymous function
df %>% mutate(model = map(data, function(x) {lm(mpg ~ wt, x)} ))
## # A tibble: 3 x 3
##     cyl               data model 
##   <dbl> <list<tibble[,2]>> <list>
## 1     4           [11 x 2] <lm>  
## 2     6            [7 x 2] <lm>  
## 3     8           [14 x 2] <lm>
map_dbl(mtcars, function(x) length(unique(x)))
##  mpg  cyl disp   hp drat   wt qsec   vs   am gear carb 
##   25    3   27   22   22   29   30    2    2    3    6


mtcars %>%
  split(.$cyl) %>%
  map(~ lm(mpg ~ wt, data = .)) %>%
  map(summary) %>%
  map("r.squared")
## $`4`
## [1] 0.5086326
## 
## $`6`
## [1] 0.4645102
## 
## $`8`
## [1] 0.4229655

mtcars %>%
  split(.$cyl) %>%
  map(~ lm(mpg ~ wt, data = .)) %>%
  map(summary) %>%
  map_dbl("r.squared")
##         4         6         8 
## 0.5086326 0.4645102 0.4229655

mtcars %>%
  split(.$cyl) %>% 
  map(~ lm(mpg ~ wt, data = .)) %>%
  map(summary) %>%
  map_dfr("r.squared")
## # A tibble: 1 x 3
##     `4`   `6`   `8`
##   <dbl> <dbl> <dbl>
## 1 0.509 0.465 0.423

mtcars %>%
  mutate(cyl = factor(cyl),
         am = factor(am)) %>%
  dplyr::select(mpg, disp, hp) %>%
  map(~ aov(.x ~ cyl * am, data = mtcars)) %>%
  map_dfr(~ broom::tidy(.), .id = 'source') %>%
  mutate(p.value = round(p.value, 5))
## # A tibble: 12 x 7
##    source term         df    sumsq    meansq statistic p.value
##    <chr>  <chr>     <dbl>    <dbl>     <dbl>     <dbl>   <dbl>
##  1 mpg    cyl           1    818.     818.      94.6    0     
##  2 mpg    am            1     37.0     37.0      4.28   0.0479
##  3 mpg    cyl:am        1     29.4     29.4      3.41   0.0755
##  4 mpg    Residuals    28    242.       8.64    NA     NA     
##  5 disp   cyl           1 387454.  387454.     138.     0     
##  6 disp   am            1   9405.    9405.       3.35   0.0779
##  7 disp   cyl:am        1    688.     688.       0.245  0.624 
##  8 disp   Residuals    28  78637.    2808.      NA     NA     
##  9 hp     cyl           1 100984.  100984.      91.3    0     
## 10 hp     am            1   7378.    7378.       6.67   0.0153
## 11 hp     cyl:am        1   6403.    6403.       5.79   0.0230
## 12 hp     Residuals    28  30961.    1106.      NA     NA

参考资料

[1]

R如何实现更快读取数据——使用redr包: https://www.jianshu.com/p/71b4fd0f0a19

[2]

Writing Data From R to Excel Files (xls|xlsx): http://www.sthda.com/english/wiki/writing-data-from-r-to-excel-files-xls-xlsx#writing-excel-files-using-xlsx-package

[3]

Reshaping Your Dat with tidyr: https://uc-r.github.io/tidyr

[4]

数据重塑之tidyr包: https://zhuanlan.zhihu.com/p/22265154

[5]

Introduction to dplyr: https://cran.r-project.org/web/packages/dplyr/vignettes/dplyr.html

[6]

dplyr包: https://www.jianshu.com/p/f8b9e6bd52a2

[7]

dplyr新功能解读: https://zhuanlan.zhihu.com/p/145839517

[8]

优雅的循环迭代:purrr包: https://zhuanlan.zhihu.com/p/168772624

[9]

R语言| 向量化操作purrr包: https://www.huaweicloud.com/articles/f522c9f56cf2d8cca5f7b390aa3f2d7c.html

[10]

tidyverse简介与管道: https://zhuanlan.zhihu.com/p/243376822

[11]

R语言编程——基于tidyverse: https://zhuanlan.zhihu.com/p/198185888

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 单细胞天地 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
「R」用purrr实现迭代
除了函数,减少重复代码的另一种工具是迭代,它的作用在于可以对多个输入执行同一种处理,比如对多个列或多个数据集进行同样的操作。
王诗翔呀
2020/07/03
4.8K0
40. R 数据整理(十一: 用purrr包实现更花样的匿名函数使用)
其实map 除了对向量有用,也可以作用于数据框或矩阵类型,相当于把其中的每一列作为一个单独的元素来看,有点像按列的apply:
北野茶缸子
2021/12/17
2.6K0
使用gtExtra美化表格
前面用2篇文章详细介绍了gt包创建表格的用法。gt很强大,但是还是不够强大,总有些大佬想要更加强大,于是就有了今天要介绍的gtExtras,这是一个扩展包,为gt提供多种强大的可视化功能!
医学和生信笔记
2022/11/15
8220
使用gtExtra美化表格
「R」dplyr 列式计算
同时对数据框的多列执行相同的函数操作经常有用,但是通过拷贝和粘贴的方式进行的话既枯燥就容易产生错误。
王诗翔呀
2022/01/21
2.5K0
R数据科学整洁之道:使用dtplyr处理大文件
有群友问如果文件比较大,读入 R 比较慢怎么办?我告诉他用 data.table 包的 fread 读取。
简说基因
2022/11/11
5950
R数据科学整洁之道:使用dplyr操作数据表
dplyr 是 tidyverse 包的一部分,提供了许多操作数据框的工具,常用的有:
简说基因
2022/11/11
9370
「R」数据操作(五):dplyr 介绍与数据过滤
在对数据进行可视化之前我们往往需要进行数据转换以得到可视化所需要的数据内容与格式。这里我们使用dplyr包操作2013年纽约市的航班起飞数据集(2013)。
王诗翔呀
2020/07/06
2.6K0
R语言第二章数据处理⑦dplyr包(2)列处理目录列名
还有另一个选项可以避免连续重新输入列名:one_of()。 您可以预先设置列名,然后在select()语句中通过将它们包装在one_of()中或使用!!运算符来引用它们。
用户1359560
2018/12/28
1.8K0
使用Tidyr重塑数据
虽然R中存在许多基本的数据处理函数,但它们至今仍有一点混乱,并且缺乏一致的编码和容易地将流一起的能力。这导致很难记忆和操作。因此我们需要更有效的代码、更容易记住语法和易于阅读的语法。而tidyr正是一个这样的包,它的唯一目的是简化创建[tidy data]的过程。本教程使您基本了解tidyr提供的数据整理的四个基本功能:
用户1359560
2019/10/24
8790
「R」dplyr 行式计算
通常 dplyr 和 R 更适合对列进行操作,而对行操作则显得更麻烦。这篇文章,我们将学习围绕rowwise() 创建的 row-wise 数据框的 dplyr 操作方法。
王诗翔呀
2022/01/21
6.3K0
R语言日常笔记(1)filter函数
在处理数据时,过滤数据是最基本的操作之一。 如果想删除一部分无效或者根本不感兴趣的数据。 dplyr有filter()函数来做这样的过滤。 使用dplyr,可以帮助使用者像使用SQL或者传统BI工具以简单且更直观的方式进行过滤。
用户1359560
2019/07/16
22.9K0
R海拾遗_再谈非标准评估
上面的例子summary的变量是disp,分组变量是cyl和am,使用三个点这里传递了任意个参数
火星娃统计
2021/06/29
7220
「Workshop」第二十二期 purrr
以map开头的一系列函数接受向量为输入,对向量的每个元素进行函数运算,再返回一个新的向量,这个新的向量的长度和原来的一样长,向量元素的名称也是一样的;输出向量的类型由map函数的后缀来表明:
王诗翔呀
2022/01/21
7010
「Workshop」第二十二期 purrr
R数据科学-1(dplyr)
如今数据分析如火如荼,R与Python大行其道。你还在用Excel整理数据么,你还在用spss整理数据么。
Jamesjin63
2022/10/25
1.7K0
R数据科学-1(dplyr)
盘一盘Tidyverse| 筛行选列之select,玩转列操作
数据导入和数据整理较乏味和无聊,很容易从入门到放弃!从数据转换和可视化开始,容易看到成果,保持学习的动力。
生信补给站
2020/08/06
1.3K0
R语言 分组计算,不止group_by
最近在研究excel透视图,想到好像自己在R-分组操作并不是很流畅,顺便学习分享一下。R自带数据集比较多,今天就选择一个我想对了解的mtcars数据集带大家学习一下R语言中的分组计算(操作)。
拴小林
2020/07/10
8.3K1
kaggle案例:核电站在世界上的分布
使用 dplyr::rename函数的时候报错 Error:`petal_length`=Petal.Lengthmust be a symbolorastring,nota formula;搜索报错找到了一个解决办法https://stackoverflow.com/questions/47755534/dplyr-rename-error-new-name-old-name-must-be-a-symbol-or-a-string-not-fo自己把R由R-3.4.2换成了R-3.5.1就不在有这个报错了
用户7010445
2020/03/03
4740
dplyr中的across操作
dplyr中的across函数取代了之前的xx_if/xx_at/xx_all,用法更加灵活,初学时觉得不如xx_if/xx_at/xx_all简单易懂,用习惯后真是利器!
医学和生信笔记
2022/11/15
7210
R海拾遗-tidyverse
tidyverse函数高效,代码简洁,受过专业训练的一般都用这个,除非记不住,能记一点是一点吧。 love&peace
火星娃统计
2020/09/15
1.2K0
数据清洗与管理之dplyr、tidyr
先前已经讲过R语言生成测试数据、数据预处理和外部数据输入等内容,但这仅仅是第一步,我们还需要对数据集进行筛选、缺失值处理等操作,以便获得可以应用于建模或者可视化的数据集(变量)。接下来就以鸢尾花测试数据集进行进一步的数据管理和筛选操作。
1480
2019/06/20
1.9K0
数据清洗与管理之dplyr、tidyr
相关推荐
「R」用purrr实现迭代
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文