[英]Subset data frame when two columns have specific different values
我有一個具有這種結構的數據框:
ID Chromosome.EU Position.EU Chromosome.AM Position.AM
AX-875 chr02 50241802 chr02 1773016
AX-964 chr02 51189882 chr05 2720414
AX-873 chr04 51371415 chr04 2902066
AX-962 chr06 51442510 chr02 2973445
AX-872 chr05 51531135 chr02 3067694
AX-877 chr02 51806507 chr05 3357612
AX-869 chr05 51816808 chr05 3367924
我想得到一個子集,僅包括具有不同染色體位置的 ID,但僅根據這對chr02-chr05 ,即:
ID Chromosome.EU Position.EU Chromosome.AM Position.AM
AX-964 chr02 51189882 chr05 2720414
AX-872 chr05 51531135 chr02 3067694
AX-877 chr02 51806507 chr05 3357612
我寫了一個條件句,我的東西滿足了我正在尋找的東西:
df[(df$Chromosome.EU=="chr02" & df$Chromosome.AM=="chr05") | (df$Chromosome.EU=="chr05" & df$Chromosome.AM=="chr02"),]
但是,對我來說似乎太長了,我想知道是否可以使用更簡潔的結構。 提前致謝!
“tidyverse”解決方案。 我不確定這是否算作“更簡潔”,但我認為它有點可讀性。 您可以通過對染色體對進行排序和粘貼來創建一個新列,例如“chr02chr05”,然后對其進行過濾。
library(dplyr)
library(purrr)
df %>%
mutate(ChromPair = map2(Chromosome.EU, Chromosome.AM, ~
paste0(sort(c(.x, .y)), collapse = ""))) %>%
filter(ChromPair == "chr02chr05")
結果:
ID Chromosome.EU Position.EU Chromosome.AM Position.AM ChromPair
1 AX-964 chr02 51189882 chr05 2720414 chr02chr05
2 AX-872 chr05 51531135 chr02 3067694 chr02chr05
3 AX-877 chr02 51806507 chr05 3357612 chr02chr05
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.