美文网首页R语言
[R语言]match(),%in%,merge()

[R语言]match(),%in%,merge()

作者: 巩翔宇Ibrahimovic | 来源:发表于2020-02-19 17:26 被阅读0次

使用%in%查看两向量的元素是否相同,返回的是逻辑向量。注意与%>%不同,%>%表示管道符。

> c(3, 4, -1) %in% c(1, 3, 4, 8)
[1]  TRUE  TRUE FALSE

接下来是一个小实战

读入数据并查看内容

reps <- read.delim("chrX_rmsk.txt.gz", header=TRUE)
head(reps,3)

查看字符类型(整体是数据框,单列是因子)

class(reps)
class(reps$repName)
levels(reps$repName)

选择我们想要的行内容

common_repclass <- c("SINE", "LINE", "LTR", "DNA", "Simple_repeat")
reps[reps$repClass %in% common_repclass, ]

计算某一列重复的行内容并排序

sort(table(reps$repClass), decreasing=TRUE)
#如果只想显示重复次数前五的名字
top5_repclass <- names(sort(table(reps$repClass), decreasing=TRUE)[1:5])
top5_repclass

match()的使用

match(x,y)返回的是x的元素在y的位置,若没有,则是NA;若有重复出现,则只返回第一次出现的值。

match(c("A", "C", "E", "A"), c("A", "B", "A", "E"))

使用paste()将两列合并成一个字符串,并查看相同的行内容。

mtfs$pos <- paste(mtfs$chr, mtfs$motif_start, sep="-")
head(mtfs,2)
rpts$pos <- paste(rpts$chr, rpts$motif_start, sep="-")
head(rpts,2)
table(mtfs$pos %in% rpts$pos)

使用match()做相同的事。

i <- match(mtfs$pos, rpts$pos)
#计算上一步没有匹配的NA值
table(is.na(i))

merge()的使用
通过相同的行内容来合并某两个数据框的列。

recm <- merge(mtfs, rpts, by.x="pos", by.y="pos")
head(recm, 2)
nrow(recm)
#设置all.x=TRUE来显示x中额外的部分,同理可应用于all.y=TRUE,默认只显示重叠的部分。
recm <- merge(mtfs, rpts, by.x="pos", by.y="pos", all.x=TRUE)

素材链接:
https://github.com/vsbuffalo/bds-files/tree/master/chapter-08-r

相关文章

网友评论

    本文标题:[R语言]match(),%in%,merge()

    本文链接:https://www.haomeiwen.com/subject/bcoafhtx.html