R语言集合操作
数据分析时可能会遇到这样的问题:
- 我有两个样本,分别得到了各自中关键基因,现在想找出两者共有的关键信息或者两者之间差异的部分,如果有成千上万个怎么实现呢?
- 我有两个表格,想找出里面重复出现的行和只在第二个表出现的行,如何实现表格的交并补集合操作呢?
本篇笔记简述tidyverse系列中dplyr包的集合操作过程,实现对列表和数据框的交并补集合运算。
首先载入R包tidyverse:
> library(tidyverse)
列表的集合操作
创建两个变量
> ### 列表的集合操作 ====================================================================== > data_1 <- c(1,2,3,4,5,6,7,8,9) > data_2 <- c(4,5,5,6,7,11,12,12,13)
集合运算
- intersect:寻找两个对象的交集
- union:用于合并两个对象的数据
- setdiff:用于查找在第一个对象中但不在第二个对象中的元素
> # 交集:得出同时存在于两个列表的值 > out_jiao <- intersect(data_1,data_2) > # 并集:得出两个列表中所有值的集合 > out_bing <- union(data_1,data_2) > # 补集:得出存在于前一个列表但是不存在于后一个列表的值 > out_bu <- setdiff(data_1,data_2)
以上是对两个集合进行交并补操作,如果是数据框、矩阵或者字符串,也可以用相同的方法进行操作,下面进行示例
多维数据的集合操作
创建两个数据框
> ### 数据框的集合操作 ====================================================================== > df_1 <- tribble( + ~x , ~y , ~z , + 1 , "a", T , + 1 , "a", F , + 2 , "b", T , + 3 , "c", F ) > df_2 <- tribble( + ~x , ~y , ~z , + 1 , "a", F , + 2 , "m", F , + 4 , "c", T )
- df_1
- df_2
交集操作
> # 交集:得到两个数据框中一致的行 > intersect(df_1,df_2) # A tibble: 1 × 3 x y z <dbl> <chr> <lgl> 1 1 a FALSE
并集操作
> # 并集:得到两个数据框中所有的唯一行 > union(df_1,df_2) # A tibble: 6 × 3 x y z <dbl> <chr> <lgl> 1 1 a TRUE 2 1 a FALSE 3 2 b TRUE 4 3 c FALSE 5 2 m FALSE 6 4 c TRUE
补集操作
> # 补集:得到只存在于第一个数据框中的行 > setdiff(df_1,df_2) # A tibble: 3 × 3 x y z <dbl> <chr> <lgl> 1 1 a TRUE 2 2 b TRUE 3 3 c FALSE
tidyverse yyds!
END
© 素材来源于网络,侵权请联系后台删除
往期推荐: