经验总结 | R语言整理数据常用小技巧

1、table()元素的提取

参考链接:https://blog.csdn.net/wlt9037/article/details/76570155

(1)table函数专注用于统计值的频数,非常好用。
我们有一组值cell_1$Func.refGene,类似于这种,

[895] “intergenic” “exonic” “UTR3”
[898] “exonic” “UTR3” “exonic”
[901] “intronic” “intronic” “intronic”
[904] “intronic” “UTR3” “UTR3”
[907] “UTR3” “UTR3” “intronic”
[910] “exonic” “UTR3” “exonic”
[913] “exonic” “UTR3” “UTR5”
[916] “UTR3” “UTR3” “UTR3”
……

我们想要知道不同的类型的值有多少,可以使用table函数。

class_label<-table(cell_1$Func.refGene)

class_label的值可以表达为:

. downstream exonic intergenic
1 8 223 245
intronic ncRNA_exonic ncRNA_intronic upstream
192 25 43 18
upstream;downstream UTR3 UTR5
5 463 91

这里的每一个标签是一个label,下面的数字代表的是各个label出现的频数。

(2)提取label为某值的频数

chrM<-as.numeric(table(cell_1$Chr=="chrM")[2])

对这个函数进行拆解。首先,就是判断chr是否等于“chrM”,其次,进行table处理,取出为TRUE的项,最后,提取为TRUE的项的频数。从而实现了我们的需求。

(3)将table转换为data.frame
这里也很简单,直接as.data.frame即可。

class_label<-as.data.frame(table(cell_1$Func.refGene))

2.提取数据框中特定行列的值。

使用which函数,可以提取行号,然后再根据行号,找到对应的列的值。

class_label[which(class_label$Var1=="intergenic"),2]

3、去除factor多余的levels

[679] nonframeshift substitution nonsynonymous SNV synonymous SNV
[682] UTR3 UTR5 Other
[685] chrM frameshift substitution nonframeshift substitution
[688] nonsynonymous SNV synonymous SNV UTR3
[691] UTR5 Other
26 Levels: . downstream exonic intergenic intronic ncRNA_exonic … ncRNA_splicing

. downstream exonic
0 0 0
intergenic intronic ncRNA_exonic
0 0 0
ncRNA_intronic upstream upstream;downstream
0 0 0
UTR3 UTR5 frameshift substitution
88 88 88
nonframeshift substitution nonsynonymous SNV startloss
76 88 0
stopgain stoploss synonymous SNV
0 0 88

可以看到有些level的值是为零的。所以,我们现在想要删去这些为零的level。

cell_count$Var1<-droplevels(cell_count$Var1)

参考链接:https://www.jianshu.com/p/9d312f0d8b3a

4、把NA项设为0。

cell_count[is.na(cell_count$average)]<-0

5。将数据框,两列合并,并且通过“特殊符号”连接起来。

使用within函数。

mutation_cell_1<-within(mutation_cell_1, mutation<- paste(V4,V5,sep="->"))

在这里插入图片描述

6。判断元素是否属于某个集合

常常我们会遇到的情况是,想要提取属于某一个list中的数,这个时候就要用到符号%in%
如:

a_s<-subset(a,Title%in%d,select = c("Accession","Title"))

提取属于d中的元素的Title名。然后再提取a中title名是d中元素的subset。

7。使用grep函数,提取指定的字符

如,提取a$Title中,以K562为开头的字符。

d<-grep("^K562",a$Title,value = T)

更多的使用,参见对grep()函数的介绍。

8。整合两个数据集(两个数据集间有共有的列)

当然是用merge()函数。

e<-merge(a_s,b_s,by.x="Accession",by.y="Sample.Name") #安装a_s数据框的Accession列,以及安装b_s的Sample.Name,整合。保留能够match的行。

9。去除数据框中的NA值

使用na.omit()函数,直接去除NA值。

h<-as.data.frame(na.omit(h))

10。使用str函数拆分指定字符串

g #g的初始值
 [1] "X48" "X52" "X56" "X72" "X49" "X51" "X75" "X65" "X54" "X55" "X82" "X64" "X71" "X78" "X68" "X80" "X81" "X47" "X69"
[20] "X67" "X77" "X84" "X90" "X66" "X74" "X76" "X88" "X59" "X63" "X57" "X70" "X73" "X60" "X53" "X61" "X83" "X79" "X50"
[39] "X62" "X22" "X40" "X1"  "X2"  "X18" "X3"  "X23" "X19" "X27" "X13" "X14" "X9"  "X10" "X24" "X29" "X34" "X16" "X31"
[58] "X35" "X15" "X41" "X6"  "X26" "X11" "X42" "X21" "X28" "X17" "X4"  "X25" "X12" "X8"  "X20" "X32" "X7"  "X30" "X33"
[77] "X36"

g<-strsplit(g,"X") #以X作为分隔符,拆分字符串

g #最后的结果如下
[[1]]
[1] ""   "48"

[[2]]
[1] ""   "52"

[[3]]
[1] ""   "56"
……

11。使用unlist()对list数据进行拆分

unlist()函数,在绘制boxplot图的时候也比较常用。

g #最后的结果如下 #接着上面
[[1]]
[1] ""   "48"

[[2]]
[1] ""   "52"

[[3]]
[1] ""   "56"
h<-as.numeric(unlist(g))
h
  [1] NA 48 NA 52 NA 56 NA 72 NA 49 NA 51 NA 75 NA 65 NA 54 NA 55 NA 82 NA 64 NA 71 NA 78 NA 68 NA 80 NA 81 NA 47 NA 69
 [39] NA 67 NA 77 NA 84 NA 90 NA 66 NA 74 NA 76 NA 88 NA 59 NA 63 NA 57 NA 70 NA 73 NA 60 NA 53 NA 61 NA 83 NA 79 NA 50
 [77] NA 62 NA 22 NA 40 NA  1 NA  2 NA 18 NA  3 NA 23 NA 19 NA 27 NA 13 NA 14 NA  9 NA 10 NA 24 NA 29 NA 34 NA 16 NA 31
[115] NA 35 NA 15 NA 41 NA  6 NA 26 NA 11 NA 42 NA 21 NA 28 NA 17 NA  4 NA 25 NA 12 NA  8 NA 20 NA 32 NA  7 NA 30 NA 33
[153] NA 36

12。使用match()函数,让数据集按照特定的顺序排列

loc <- match(h$`na.omit(h)`,f$V1) #获取h的顺序
j<-f[loc,] #让f的行按照这样的顺序排列

现在先写到这里,以后用到其他比较特殊的小技巧会再进行补充。要重视经验的提取和再利用。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值