根据其他文件行重新排序数据表中的所有列

时间:2016-11-10 11:43:48

标签: r data.table

我有一个data.table(dt1),其中有一些ID按我的标准排序。

1. id10
2. id7757
3. id75340
4. id999
5. id5498

以及第二个data.table(dt2),其中第一个data.table的ID为列名。

SOURCE    id7757    id8948    id5498    id999     id10    id75340
source1   32        87        643       8676      34      10
source2   65        32        876       9457      8       777
source3   64        666       99        222       66      222

如何根据第一个data.table的顺序缩短第二个data.table的列?意思是第1位的id应该是第1列,第2位〜第2列等...

输出文件应如下所示:

SOURCE    id10    id7757    id75340    id999    id5498
source1   34      32        10         8676     643
source2   8       65        777        9476     32
source3   66      64        222        222      666

如何在R?

中完成

2 个答案:

答案 0 :(得分:1)

实际上,它非常直接地做到这一点。结果我的数据集有问题。

首先首先清理数据集人员!

解决方案如下:

all.sorted <- read.table("sorted.txt", header=T, sep=' ', na.strings="n/a")

sorted.ids <- unlist(all.sorted$ID)
sorted.ids.sanitized <- make.names(sorted.ids)

sorted.variants <- sorted.ids.sanitized # this step was just to check if all is good and keep a copy of the original
sorted.variants <- as.character(sorted.variants)

new.order <- dt2[, sorted.variants]

答案 1 :(得分:0)

基础/ dplyr方法:

new_order <- sapply(dt1$V2, grep, colnames(dt2)) %>% unlist()

select(dt2, SOURCE, new_order)

SOURCE id10 id7757 id75340 id999 id5498
1: source1   34     32      10  8676    643
2: source2    8     65     777  9457    876
3: source3   66     64     222   222     99