R中是否有等效的unix“comm”命令?

时间:2011-03-10 11:04:51

标签: unix r comm

我有一个主文件,其中包含唯一ID列表,并希望将三个文件与ID的子集对齐,最后得到: 第1列(id1,id2,id3,id4等)第2列(空格,id2,空格,空格)第3列(id1,id2,空格)第4列(id1,空格id3空格)等 我在R中有一个唯一的列表,而unix中的“comm”命令似乎也是这样 - 在R中有一个等价的吗?

1 个答案:

答案 0 :(得分:3)

您的数据结构不是很清楚,但如果您从以下向量开始:

R> master <- paste("id",1:10,sep="")
R> sub1 <- paste("id",c(2,3,5),sep="")
R> sub2 <- paste("id",c(1,4,8,9),sep="")
R> master
[1] "id1"  "id2"  "id3"  "id4"  "id5"  "id6"  "id7"  "id8"  "id9"  "id10"
R> sub1
[1] "id2" "id3" "id5"
R> sub2
[1] "id1" "id4" "id8" "id9"

您可以从 ID列表中创建数据框,并将这些ID用作行名称:

R> df <- data.frame(master=master, row.names=master)
R> df
     master
id1     id1
id2     id2
id3     id3
id4     id4
id5     id5
id6     id6
id7     id7
id8     id8
id9     id9
id10   id10

然后,您可以通过以下方式为每个子集添加新列:

R> df[sub1, "sub1"] <- sub1
R> df[sub2, "sub2"] <- sub2

具有以下结果:

R> df
     master sub1 sub2
id1     id1 <NA>  id1
id2     id2  id2 <NA>
id3     id3  id3 <NA>
id4     id4 <NA>  id4
id5     id5  id5 <NA>
id6     id6 <NA> <NA>
id7     id7 <NA> <NA>
id8     id8 <NA>  id8
id9     id9 <NA>  id9
id10   id10 <NA> <NA>