首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于条件的和列

基于条件的和列
EN

Stack Overflow用户
提问于 2018-04-17 21:13:22
回答 1查看 63关注 0票数 1

我有一个如下所示的数据集:

代码语言:javascript
复制
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

这是我想做的。每一行:

如果if = 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.

你最终会:

代码语言:javascript
复制
scaf   pos   ref   A    B
MT1   11722   A    0    0
MT1   11723   T    8    2
MT1   11724   A    8    8

知道我怎么能做到吗?请记住,我有大约100列和数千行。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-17 21:34:01

使用`dplyr::case_when‘的一个选项可以是:

代码语言:javascript
复制
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              

数据:

代码语言:javascript
复制
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)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49887576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档