我有一個 BLAST 工具的經典輸出,如下表所示。為了使表格更易于閱讀,我減少了列數。
| 詢問 | 主題 | 開始主題 | 結束主題 |
|---|---|---|---|
| 1 | SRR | 50 | 100 |
| 1 | SRR | 500 | 450 |
我需要的是創建另一列,稱為“strand”,當查詢在第一行中向前時,因此 startinsubject 小于 endinsubject 時,會在新列 F 中寫入。另一方面,當查詢反向時,如在第二行,startinsubject 高于 endinsubject,它會在新的“strand”列中添加一個 R。
我想得到一張像下面這樣的新桌子。有人可以幫我嗎?萬分感謝
| 詢問 | 主題 | 開始主題 | 結束主題 | 股 |
|---|---|---|---|---|
| 1 | SRR | 50 | 100 | F |
| 1 | SRR | 500 | 450 | R |
uj5u.com熱心網友回復:
這是一個ifelse選項。您可以使用以下代碼:
df <- data.frame(query = c(1,1),
subject = c("SRR", "SRR"),
startinsubject = c(50, 500),
endinsubject = c(100, 450))
library(dplyr)
df %>%
mutate(strand = ifelse(startinsubject > endinsubject, "R", "F"))
輸出:
query subject startinsubject endinsubject strand
1 1 SRR 50 100 F
2 1 SRR 500 450 R
uj5u.com熱心網友回復:
我們可以使用ifelse/case_when或只是將邏輯索引轉換為數字索引以進行替換
library(dplyr)
df1 <- df1 %>%
mutate(strand = c("R", "F")[1 (startinsubject < endinsubject)])
-輸出
df1
query subject startinsubject endinsubject strand
1 1 SRR 50 100 F
2 1 SRR 500 450 R
資料
df1 <- structure(list(query = c(1L, 1L), subject = c("SRR", "SRR"),
startinsubject = c(50L, 500L), endinsubject = c(100L, 450L
)), class = "data.frame", row.names = c(NA, -2L))
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/453443.html
