使用%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
网友评论