lipc20052006的个人博客分享 http://blog.sciencenet.cn/u/lipc20052006

博文

match %in% ,数据框 行列筛选

已有 3746 次阅读 2014-12-13 00:46 |个人分类:R|系统分类:科研笔记

1.根据给定的一个向量来筛选另一个向量

> a

[1] "ANN" "AW2" "AW1" "CRN" "W0"  "UW1" "UW2" "UW3" "UNN"

> b

[1] "ARN"  "TNN"  "BRN"  "CRN"  "AW2"  "AW1"  "W0"   "UW1"  "UW2"

[10] "UW3"  "ANN"  "UNN"  "TUN1" "TUN2"

a,b 两个向量,现在要根据a对b进行筛选,

> match(b,a)          ########得到匹配上的a中元素的下标

[1] NA NA NA  4  2  3  5  6  7  8  1  9 NA NA

> b[match(b,a)]       ###3##得到能够匹配上的元素

[1] NA    NA    NA    "CRN" "TNN" "BRN" "AW2" "AW1" "W0"  "UW1" "ARN"

[12] "UW2" NA    NA  

> b%in%a               ##########

[1] FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE

[12]  TRUE FALSE FALSE

> b[b%in%a]         ####提取匹配到的元素效果很好

[1] "CRN" "AW2" "AW1" "W0"  "UW1" "UW2" "UW3" "ANN" "UNN"


2.根据特定顺序来排序一个向量(这个有点难度,不太好理解)

> c=b[b%in%a]

> c

[1] "CRN" "AW2" "AW1" "W0"  "UW1" "UW2" "UW3" "ANN" "UNN"

虽然获取了匹配的向量,想把c按a的顺序进行排列

> a

[1] "ANN" "AW2" "AW1" "CRN" "W0"  "UW1" "UW2" "UW3" "UNN"

> match(c,a)     #####先获取c在a中的下标位置

[1] 4 2 3 5 6 7 8 1 9

> order(match(c,a)) #####对获得的下标进行排序

[1] 8 2 3 1 4 5 6 7 9

> c[order(match(c,a))]    #######得到特定顺序的向量

[1] "ANN" "AW2" "AW1" "CRN" "W0"  "UW1" "UW2" "UW3" "UNN"


#########################################################################################

3.对数据框变量名进行筛选,并且让变量按特定顺序排列

> data1

    ARN TNN BRN CRN AW2 AW1 W0 UW1 UW2 UW3 ANN UNN TUN1 TUN2

ARN   NA   8  10   4   7   5  7   6   7   5   6   3    8    5

TNN    8  NA   6   6   6   3  5   7   6  11   6  13    6    9

BRN   10   6  NA   1  18   3  4   2   3   3  16   1    2    2

> trait

[1] "ANN" "AW2" "AW1" "CRN" "W0"  "UW1" "UW2" "UW3" "UNN"

> data2=subset(data1,select =trait)  ##### 可以按trait 进行筛选变量,并得到一定的顺序

> data2

    ANN AW2 AW1 CRN W0 UW1 UW2 UW3 UNN

ARN    6   7   5   4  7   6   7   5   3

TNN    6   6   3   6  5   7   6  11  13

4.对数据框列名进行筛选,并且让变量按特定顺序排列

> data3=data2[row.names(data2)%in%trait,]  #######先按向量筛选

> data3

   ANN AW2 AW1 CRN W0 UW1 UW2 UW3 UNN

CRN   1   1   3  NA  8  12   7  11  13

AW2  18  NA   2   1  1   1   2   2   1

AW1   3   2  NA   3  5   4   3   4   2

W0    2   1   5   8 NA  12   7   6   5

UW1   1   1   4  12 12  NA   8   9   9

UW2   1   2   3   7  7   8  NA   9   6

UW3   2   2   4  11  6   9   9  NA  16

ANN  NA  18   3   1  2   1   1   2   1

UNN   1   1   2  13  5   9   6  16  NA


> data3[row.names(data3)[order(match(row.names(data3),trait))],] #####按特定向量拍顺序

   ANN AW2 AW1 CRN W0 UW1 UW2 UW3 UNN

ANN  NA  18   3   1  2   1   1   2   1

AW2  18  NA   2   1  1   1   2   2   1

AW1   3   2  NA   3  5   4   3   4   2

CRN   1   1   3  NA  8  12   7  11  13

W0    2   1   5   8 NA  12   7   6   5

UW1   1   1   4  12 12  NA   8   9   9

UW2   1   2   3   7  7   8  NA   9   6

UW3   2   2   4  11  6   9   9  NA  16

UNN   1   1   2  13  5   9   6  16  NA







https://blog.sciencenet.cn/blog-253562-850615.html

上一篇:r apply 家族
收藏 IP: 114.251.216.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-6-4 17:08

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部