首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找变量以进行计算

查找变量以进行计算
EN

Stack Overflow用户
提问于 2017-07-05 15:00:38
回答 2查看 40关注 0票数 0

我有一个表格,数据‘,其中包含样本名称和测量大小。我需要转换大小为CAG使用公式((CAG-侧翼)/3)+校正。问题是每个样本都有一个不同的“侧翼”和“校正”,就像在“设置”中定义的那样。然后,我需要过滤出CAG小于'start‘或大于'end’的行。“开始”和“结束”是在“设置”中定义的,并且每个示例也不同。我非常感谢您帮助调整计算,以便为每个样本编制适当的侧翼索引和更正。

代码语言:javascript
复制
#Example dataset
data <- data.frame(sample = c('A01', 'A01', 'A02', 'A02', 'A03', 'A04', 'A04'),
               size = c(200, 280, 315, 430, 510, 560, 610))


#Define controls for each sample
settings <- data.frame(samples = c('A01', 'A02', 'A03', 'A04'),
                   flank = c(108, 108, 60, 60)
                   correction = (2, 2, 1, 1)
                   start = (10, 10, 13, 13)
                   end = (2000, 2000, 6000, 6000)
                   control = c('A01', 'A01', 'A03', 'A03')) 

#Convert size unit from bp to CAG in new column
data$CAG <- ((data$size - flank)/3)+correction

#Exclude peaks outside the window
filter <- subset(data, CAG >= start & CAG <= end)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-05 15:06:41

为OPs注释编辑的

使sampledatasettings中的列名相同。然后你就可以:

代码语言:javascript
复制
library(dplyr)
full_join(data,settings,c=("sample")) %>% 
    mutate(CAG = ((size-flank)/3)+correction) %>%
    rowwise() %>%
    filter(between(CAG,start,end)) %>%
    ungroup()

这将为您的输出创建一个新的列CAG,并且只保留>= start<= end的CAG值。

代码语言:javascript
复制
  sample size flank correction start  end control       CAG
1    A01  200   108          2    10 2000     A01  32.66667
2    A01  280   108          2    10 2000     A01  59.33333
3    A02  315   108          2    10 2000     A01  71.00000
4    A02  430   108          2    10 2000     A01 109.33333
5    A03  510    60          1    13 6000     A03 151.00000
6    A04  560    60          1    13 6000     A03 167.66667
7    A04  610    60          1    13 6000     A03 184.33333
票数 1
EN

Stack Overflow用户

发布于 2017-07-05 15:05:11

您可以合并两个数据帧,以便每个样本将有其相应的侧翼和校正。然后你做你的计算。

代码语言:javascript
复制
settings$sample <- settings$samples   # You need an id variable with a common name.
data_merged <- merge(data, settings, by = sample) 

data_merged$CAG <-  ((data_merged$size - data_merged$flank)/3) + data_merged$correction
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44929798

复制
相关文章

相似问题

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