如何自动查找列表的值是否存在于 R 的另一列数据框中

生物技术爱好者

在现有的 csv 中,有一列包含以下代码之一,即每一行的外膜 [GO:0019867]。我想向 csv 添加一列,该列将为每一行提供一个类别,即 OuterMembrane。所以我添加了一个空列,我想制作这个列表,以便在代码被引用到 csv 时自动添加通用类别。(并非所有编码都包括在内)

categ <- list(OuterMembrane = c("outer membrane [GO:0019867]","cell outer membrane [GO:0009279]", "integral component of membrane [GO:0016021]", "membrane [GO:0016020]"),
              Cytoplasmic =c("ribosome [GO:0005840]", "cytoplasm [GO:0005737]"),
              Extracellular=c(),
              InnerMembrane=c("plasma membrane [GO:0005886]", "membrane [GO:0016020]"),
              Periplasmic=c("periplasmic space [GO:0042597]"),
              CellWall=c(),
              Vacuole=c(),
              Lipoproteins=c())


csv1 <- csv1%>%
  add_column("Subcellular Localization" = NA)

for (row in (categ)){ 
   if row(categ) %in% csv1{

………………??????

卡兰帕利基

以下内容for loop可能对您的问题有所帮助。

csv1['subcellular_localization'] <- NA      #add a new column 

for (i in 1:nrow(csv1)) {                   #fill in the new column
  for (j in 1:length(categ)) {
    if (csv1$cell_comp[i] %in% categ[[j]]) {
       csv1$subcellular_localization[i] <- names(categ[j])
    }
  }
}

csv1

输入:

> csv1
  name                      cell_comp
1   p1    outer membrane [GO:0019867]
2   p2         cytoplasm [GO:0005737]
3   p3 periplasmic space [GO:0042597]

输出:

> csv1
  name                      cell_comp subcellular_localization
1   p1    outer membrane [GO:0019867]            OuterMembrane
2   p2         cytoplasm [GO:0005737]              Cytoplasmic
3   p3 periplasmic space [GO:0042597]              Periplasmic

编辑

如果每个蛋白质有多个细胞成分,可以使用以下形式的 for 循环(使用stringr库):

library(stringr)

for (i in 1:nrow(csv1)) {
  components <- unlist(strsplit(csv1$cell_comp[i], ';'))
  for (component in components) {
    component <- str_trim(component, side='left')
    for (j in 1:length(categ)) {
      if (component %in% categ[[j]]) {
        if (is.na(csv1$subcellular_localization[i])) {
          csv1$subcellular_localization[i] <- names(categ[j])
        } else {
          if (csv1$subcellular_localization[i] != names(categ[j])) {
            csv1$subcellular_localization[i] <- paste(csv1$subcellular_localization[i],names(categ[j]), sep="; ")
          } else {
            csv1$subcellular_localization[i] <- names(categ[j])
          }
        }
      }
    }
  }
}

输入*:

> csv1
  name                                                                cell_comp
1   p1 outer membrane [GO:0019867]; integral component of membrane [GO:0016021]
2   p2                   cytoplasm [GO:0005737]; periplasmic space [GO:0042597]
3   p3                                           periplasmic space [GO:0042597]

输出*:

> csv1
  name                                                                cell_comp subcellular_localization
1   p1 outer membrane [GO:0019867]; integral component of membrane [GO:0016021]            OuterMembrane
2   p2                   cytoplasm [GO:0005737]; periplasmic space [GO:0042597] Cytoplasmic; Periplasmic
3   p3                                           periplasmic space [GO:0042597]              Periplasmic

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

R:如何用不同数据框中的另一列替换一列?

如何检查r中数据框中的一列值是否对应于数据框中每一行的另一列?

根据R中的另一数据框替换一列中的值

获取由R数据框中的另一列中的值分隔的一列的箱线图统计信息

查找不在 R 中另一个数据框的另一列中的列中的元素

根据数据框 R 中另一列中的值复制值

R:根据另一列中的值在数据框中移动一列的总和

在数据框中查找另一列中值差异最大的行,R

查找值是否存在于多个列表中

R 数据框:如何根据另一列中不同值的列值对数据进行切片

将列添加到基于 R 中的字符列表对另一列中的值求和的数据框

检查项目是否存在于 R 的嵌套列表中

R:将数据框的多个列中的多个值替换为另一列中的值

R - 基于另一列中的字符串用其他列的值填充数据框的列

以 R 中另一列值的总和为条件在数据框中创建新列

列值未根据 R 中数据框中另一列的模式搜索进行更新

当一列的值大于 r 中的另一列时,如何将数据框中的行值转换为 NA?

使用Apply函数将基于数据框中月份的值替换为r中另一列中的值

R数据框:如何在一个列而不是另一列中查找项目(两列包含相似的列表)

在R数据框中创建布尔列,如果另一列的值逐行更改,则返回true

用R中另一列的分组值进行计数来创建一个新的数据框

根据 R 中一列的值将一个数据框中的值插入到另一个数据框中

如何在数据框的列上使用R的diff函数,条件是在另一列中具有特定值

基于另一列中的值对 R 数据框中的行进行矢量化重新编码

使用 case_when() 和 filter() 根据 R 中一列中的值和另一列中的级别对数据框进行子集化

如何使用R中的另一列重塑数据框以创建二进制组合

根据 R 中同一数据框中另一列的值将值分配给 R 中的列

我可以使用R中另一个数据框的对应值来划分数据框的每一列吗?

根據R中另一列數據框的組查找列的公共值