我有一个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?
中完成答案 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