zoukankan      html  css  js  c++  java
  • R语言中实现数据的匹配与合并

    1、merge函数

    dir()
    test1 <- read.table("test1.txt", header = F)
    test1
    test2 <- read.table("test2.txt", header = F)
    test2
    result <- merge(test1, test2, by.x = "V1", by.y = "V1")
    result
    result2 <- merge(test1, test2, by.x = "V1", by.y = "V1", sort = F)
    result2
    > dir()     ## 列出当前工作路径下的文件
    [1] "test1.txt" "test2.txt"
    > test1 <- read.table("test1.txt", header = F)  ## 读取测试数据test1
    > test1
       V1 V2
    1 159  0
    2 430  0
    3 350  0
    4 410  0
    5 108  0
    6 630  0
    7 424  0
    8 265  0
    9 428  0
    > test2 <- read.table("test2.txt", header = F)  ## 读取测试数据test2
    > test2
       V1 V2
    1 430 66
    2 630 44
    3 265 88
    4 108 22
    5 350 77
    6 424 99
    7 410 33
    8 159 11
    9 428 55
    > result <- merge(test1, test2, by.x = "V1", by.y = "V1")  ## 利用merge进行合并,指定合并依据的列名,默认合并后并进行排序
    > result
       V1 V2.x V2.y
    1 108    0   22
    2 159    0   11
    3 265    0   88
    4 350    0   77
    5 410    0   33
    6 424    0   99
    7 428    0   55
    8 430    0   66
    9 630    0   44
    > result2 <- merge(test1, test2, by.x = "V1", by.y = "V1", sort = F) ## 利用sort = F选项设定匹配合并后不排序
    > result2
       V1 V2.x V2.y
    1 159    0   11
    2 430    0   66
    3 350    0   77
    4 410    0   33
    5 108    0   22
    6 630    0   44
    7 424    0   99
    8 265    0   88
    9 428    0   55

    2、match函数实现

    dir()
    test1 <- read.table("test1.txt", header = F)
    test1
    test2 <- read.table("test2.txt", header = F)
    test2
    result <- test2[match(test1$V1, test2$V1),]
    result
    > dir()
    [1] "test1.txt" "test2.txt"
    > test1 <- read.table("test1.txt", header = F)  ## 读取测试数据
    > test1
       V1 V2
    1 159  0
    2 430  0
    3 350  0
    4 410  0
    5 108  0
    6 630  0
    7 424  0
    8 265  0
    9 428  0
    > test2 <- read.table("test2.txt", header = F)
    > test2
       V1 V2
    1 430 66
    2 630 44
    3 265 88
    4 108 22
    5 350 77
    6 424 99
    7 410 33
    8 159 11
    9 428 55
    > result <- test2[match(test1$V1, test2$V1),]   ## 利用match函数匹配,返回索引,利用索引提取指定数据
    > result
       V1 V2
    8 159 11
    1 430 66
    5 350 77
    7 410 33
    4 108 22
    2 630 44
    6 424 99
    3 265 88
    9 428 55

    3、shell实现

    root@PC1:/home/test2# ls
    test1.txt  test2.txt
    root@PC1:/home/test2# cat test1.txt
    159     0
    430     0
    350     0
    410     0
    108     0
    630     0
    424     0
    265     0
    428     0
    root@PC1:/home/test2# cat test2.txt
    430     66
    630     44
    265     88
    108     22
    350     77
    424     99
    410     33
    159     11
    428     55
    root@PC1:/home/test2# cat test1.txt | while read {i,j}; do grep -w "$i" test2.txt >> result.txt; done  ## 利用while循环 + grep命令实现
    root@PC1:/home/test2# ls
    result.txt  test1.txt  test2.txt
    root@PC1:/home/test2# cat result.txt
    159     11
    430     66
    350     77
    410     33
    108     22
    630     44
    424     99
    265     88
    428     55
  • 相关阅读:
    关于position定位
    获取滚动条距离的兼容问题
    margin取百分值
    float 与 display:inline-block
    Object.getOwnPropertyNames()
    正则表达式的方法:replace,match,test(replace参数可以是回调函数)
    offset / scroll / client Left / Top
    client / page / offset / screen X / Y
    原生js贪吃蛇
    Functional PHP 5.3 Part I
  • 原文地址:https://www.cnblogs.com/liujiaxin2018/p/15734416.html
Copyright © 2011-2022 走看看