[英]Sum columns based on condition
我有一個看起來像這樣的數據集:
scaf pos ref A-1 A-2 A-3 A-4 B-1 B-2 B-3 B-4
MT1 11722 A 330 0 0 0 111 0 0 0
MT1 11723 T 0 230 0 8 0 18 0 2
MT1 11724 A 222 2 6 0 56 8 0 0
這是我想做的。 對於每一行:
如果ref = A,則將A-2至A-4列和B-2至B-4列相加
如果ref = T,則將A-1,A-3和A4列與B-1,B3和B-4相加
如果ref = C,則將A-1,A-2和A4列相加。 與B列相同
如果ref = G,則將列A-1至A-3和B1至B3相加。
您最終將得到:
scaf pos ref A B
MT1 11722 A 0 0
MT1 11723 T 8 2
MT1 11724 A 8 8
知道我該怎么做嗎? 請記住,我大約有100列和數千行。
謝謝!
使用`dplyr :: case_when'的一個選項可以是:
df %>% mutate(A = case_when(
ref == "A" ~ A.2+A.4,
ref == "T" ~ A.1+A.3+A.4,
ref == "C" ~ A.1+A.2+A.4,
ref == "G" ~ A.1+A.3
)) %>%
mutate(B = case_when(
ref == "A" ~ B.2+B.4,
ref == "T" ~ B.1+B.3+B.4,
ref == "C" ~ B.1+B.2+B.4,
ref == "G" ~ B.1+B.3
)) %>%
select(scaf, pos, ref, A, B)
# scaf pos ref A B
# 1 MT1 11722 A 0 0
# 2 MT1 11723 T 8 2
# 3 MT1 11724 A 2 8
數據:
df <- read.table(text =
"scaf pos ref A-1 A-2 A-3 A-4 B-1 B-2 B-3 B-4
MT1 11722 A 330 0 0 0 111 0 0 0
MT1 11723 T 0 230 0 8 0 18 0 2
MT1 11724 A 222 2 6 0 56 8 0 0",
header = TRUE, stringsAsFactors = FALSE)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.