【问题标题】:Systematic replacement of ID codes in RR中ID代码的系统替换
【发布时间】:2019-09-20 23:13:11
【问题描述】:

我有 3 个数据框、坐标、anno 和转换。

coords 包含坐标列表和每个位置的 ID 代码。有些位置有多个坐标。

row 36381: NW_003566036.1, 1244298
row 36390: NW_003566036.1, 1317973
row 36396: NW_003566036.1, 1430739

anno包含另一种形式的坐标数据,ID也是另一种形式。

row 1: CM001169.1, gene, 1965676, LOC100649911
row 3: CM001170.1, gene, 1491294, LOC100647500

转换是不同 ID 代码从一个到另一个的 1:1 映射。

row 1: NC_015762.1, CM001169.1
row 2: NC_015763.1, CM001170.1

我想输出一个新的数据框,用 anno 中使用的 ID 代码替换 coords 中使用的 ID 代码,但是,手动执行此操作将是可怕的,因为有超过 5000 个位置。它们的顺序不同,convert 中的一些 ID 不存在于 coords 或 anno 中。

我尝试使用 recode() ,但重复 5000 多个实例似乎不切实际。我还尝试了 plyr 包中的 mapvalues,但它强烈反对我关于可接受的输出是什么。

例如:

output <- data.frame(mapvalues(coords$ID, from = convert$`old ID`, 
to = convert$`new ID`))

抽出一个空表/向量/东西。

我收到以下错误:

Error in mapvalues(coords, from = convert$`old code`, to = convert$`new code`) : 
  `x` must be an atomic vector.

使用此代码:

output <- mapvalues(coords, from = convert$`old ID`, to = convert$`new ID`)

【问题讨论】:

  • 这是良好样本数据的开始,但要使答案真正可测试,我们需要包含实际匹配的样本数据。更好的是,如果样本数据是我可以复制和使用的东西,例如:dput(head(x)) 的输出,或data.frame(...) 的编程定义; tertiary 是框架的控制台输出(至少是相关列),但是当任何字段中有空格或类中存在歧义时(POSIXtfactor/character 等),最后一个选项会变得有点问题.

标签: r database dataframe


【解决方案1】:

您可以将coordsmapping 表内联,然后将结果与anno 表内联。

我不知道列名,但应该是这样的:

library(dplyr)

result <- coords %>% 
    inner_join(mapping, by = c('ID_coords' = 'ID_coords')) %>% 
    inner_join(anno, by = c('ID_anno' = 'ID_anno'))

【讨论】:

  • 它需要一点点抖动和过滤,但 inner_join 函数完成了这项工作,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-09
相关资源
最近更新 更多