R语言基础-数据清洗函数pivot_longer

2022-07-10 12:12:52 浏览数 (1)

发现自己的R语言的基础还是相对弱很多的,通过对前面的肺癌单细胞文章代码的学习,也在巩固自己的R基础。今天是需要对昨天test的icitools的R包进行自己的数据分析。

首先是需要对自己所查找的转录组的数据进行整理,由于给的example的数据比较少,因此发现手动也是可以的,很快,但是由于自己的转录组数据太多了,达到了几十个,因此自己需要再次借助R语言的函数转换。

第一个是我觉得很好的函数,是两组的数据合并的函数,一开始自己只会在excel上运用相关的公式,但是发现这个包的运行比excel更快,是dplyer下面的full_join.

今天说的是图和把excel里面的宽表变成长表的函数pivot_longer函数,是tidyr包下面的一个函数。

函数的网页讲解:https://tidyr.tidyverse.org/reference/pivot_longer.html

图片.png图片.png
代码语言:javascript复制
pivot_longer(
  data,
  cols,
  names_to = "name",
  names_prefix = NULL,
  names_sep = NULL,
  names_pattern = NULL,
  names_ptypes = NULL,
  names_transform = NULL,
  names_repair = "check_unique",
  values_to = "value",
  values_drop_na = FALSE,
  values_ptypes = NULL,
  values_transform = NULL,
  ...
)

参数

data:自己所需要转换的数据集

cols:<tidy-select> 要转换为更长格式的列。

names_to:一个字符向量,指定要根据存储在 cols 指定的数据的列名中的信息创建一个或多个新列。

如果长度为 0,或者如果提供了 NULL,则不会创建任何列。

如果长度为 1,将创建一个包含 cols 指定的列名的列。

如果长度>1,将创建多个列。在这种情况下,必须提供 names_sep 或 names_pattern 之一来指定如何拆分列名。您还可以利用两个额外的字符值:

NA 将丢弃列名的相应组件。

“.value”表示列名的相应组件定义了包含单元格值的输出列的名称,完全覆盖 values_to。

names_prefix:用于从每个变量名称的开头删除匹配文本的正则表达式。

names_sep, names_pattern:如果 names_to 包含多个值,则这些参数控制列名称的分解方式。

names_sep 采用与单独()相同的规范,可以是数字向量(指定要中断的位置),也可以是单个字符串(指定要拆分的正则表达式)。

names_pattern 采用与 extract() 相同的规范,一个包含匹配组 (()) 的正则表达式。

如果这些参数没有给您足够的控制权,请使用 pivot_longer_spec() 创建一个规范对象并根据需要手动处理。

names_ptypes, values_ptypes:(可选)列名-原型对的列表。或者,可以提供一个空原型,它将应用于所有列。原型(或简称 ptype)是一个零长度向量(如 integer() 或 numeric()),它定义了向量的类型、类和属性。如果您想确认创建的列是您期望的类型,请使用这些参数。请注意,如果要更改(而不是确认)特定列的类型,则应改用 names_transform 或 values_transform。

出于向后兼容的原因,提供 list() 被解释为与 NULL 相同,而不是在所有列上使用列表原型。预计这种情况在未来会有所改变。

names_transform, values_transform:(可选)列名-函数对的列表。或者,可以提供一个函数,该函数将应用于所有列。如果您需要更改特定列的类型,请使用这些参数。例如,names_transform = list(week = as.integer) 会将名为 week 的字符变量转换为整数。

如果未指定,则从 names_to 生成的列的类型将为字符,从 values_to 生成的变量的类型将是用于生成它们的输入列的常见类型。

names_repair:如果输出的列名无效会怎样?如果列重复,默认值“check_unique”会出错。使用“minimal”允许在输出中重复,或“unique”通过添加数字后缀来消除重复。有关更多选项,请参见 vctrs::vec_as_names()。

values_to:一个字符串,指定要从存储在单元格值中的数据创建的列的名称。如果 names_to 是包含特殊 .value 标记的字符,则该值将被忽略,并且 value 列的名称将从现有列名的一部分派生。

values_drop_na:如果为 TRUE,将删除 value_to 列中仅包含 NA 的行。这有效地将显式缺失值转换为隐式缺失值,并且通常仅应在数据中的缺失值由其结构创建时使用。

下面是官网上的一段example

代码语言:javascript复制
# See vignette("pivot") for examples and explanation

# Simplest case where column names are character data
relig_income
#> # A tibble: 18 × 11
#>    religion      `<$10k` `$10-20k` `$20-30k` `$30-40k` `$40-50k` `$50-75k`
#>    <chr>           <dbl>     <dbl>     <dbl>     <dbl>     <dbl>     <dbl>
#>  1 Agnostic           27        34        60        81        76       137
#>  2 Atheist            12        27        37        52        35        70
#>  3 Buddhist           27        21        30        34        33        58
#>  4 Catholic          418       617       732       670       638      1116
#>  5 Don’t know/r…      15        14        15        11        10        35
#>  6 Evangelical …     575       869      1064       982       881      1486
#>  7 Hindu               1         9         7         9        11        34
#>  8 Historically…     228       244       236       238       197       223
#>  9 Jehovah's Wi…      20        27        24        24        21        30
#> 10 Jewish             19        19        25        25        30        95
#> 11 Mainline Prot     289       495       619       655       651      1107
#> 12 Mormon             29        40        48        51        56       112
#> 13 Muslim              6         7         9        10         9        23
#> 14 Orthodox           13        17        23        32        32        47
#> 15 Other Christ…       9         7        11        13        13        14
#> 16 Other Faiths       20        33        40        46        49        63
#> 17 Other World …       5         2         3         4         2         7
#> 18 Unaffiliated      217       299       374       365       341       528
#> # … with 4 more variables: `$75-100k` <dbl>, `$100-150k` <dbl>,
#> #   `>150k` <dbl>, `Don't know/refused` <dbl>
relig_income %>%
  pivot_longer(!religion, names_to = "income", values_to = "count")
#> # A tibble: 180 × 3
#>    religion income             count
#>    <chr>    <chr>              <dbl>
#>  1 Agnostic <$10k                 27
#>  2 Agnostic $10-20k               34
#>  3 Agnostic $20-30k               60
#>  4 Agnostic $30-40k               81
#>  5 Agnostic $40-50k               76
#>  6 Agnostic $50-75k              137
#>  7 Agnostic $75-100k             122
#>  8 Agnostic $100-150k            109
#>  9 Agnostic >150k                 84
#> 10 Agnostic Don't know/refused    96
#> # … with 170 more rows

同时也可以加入管道符%>%

代码语言:javascript复制
##example
library(dplyer)
library(tidyr)
new <- old %>% pivot_longer(-Sample, names_to = "new", values_to = "count")

总结

R语言不只是一个强大的可视化软件,在做的组学多了后,发现对一般的表格的处理也是具有强大的功能呢,因此在后续的学习中,我也要加强相关的基础的学习。

0 人点赞