【问题标题】:Assigning full names to acronyms为首字母缩写词分配全名
【发布时间】:2021-06-14 14:29:19
【问题描述】:

目前我有一个数据框,其中包含独特癌症类型 (hotspot_mockup) 的首字母缩写词,如下所示:

Cancer Gene
AASTR IDH1
ACRM NRAS

在另一个数据框中,我将这 184 个唯一的首字母缩略词及其对应的全名 (new_hotspot_cancers)。格式为:

Acronym Full Name
AASTR Anaplastic Astrocytoma
ACRM Acral Melanoma

我想将第一个数据帧中的首字母缩写词替换为第二个数据帧中对应的全名(当然假设该首字母缩写词存在于第二个数据帧中)。总的来说,我希望结果看起来像:

Cancer Gene
Anaplastic Astrocytoma IDH1
Acral Melanoma NRAS

我在考虑某种“for”循环,但我知道这在 R 中是不受欢迎的。一如既往,任何指导都将不胜感激!

【问题讨论】:

    标签: r dataframe for-loop acronym


    【解决方案1】:

    我在考虑某种“for”循环,但我知道这在 R 中是不受欢迎的。

    并不是说它不受欢迎,而是那些有其他编程语言经验的人在不需要时倾向于在 R 中使用 for 循环——要么是因为 R 默认为矢量化,要么是因为有像 lapply() 这样的函数或map() 来自 purrr 包,可以更有效地完成 for 循环的工作。

    在这种情况下,您可以从 dplyr 包中执行 left_join()

    df1 <- data.frame(Cancer = c("AASTR", "ACRM"), Gene = c("IDH1", "NRAS"))
    df2 <- data.frame(Acronym = c("AASTR", "ACRM"), Full_Name = c("Anaplastic Astrocytoma", "Acral Melanoma"))
    
    dplyr::left_join(df1, df2, by = c("Cancer" = "Acronym"))
    
      Cancer Gene              Full_Name
    1  AASTR IDH1 Anaplastic Astrocytoma
    2   ACRM NRAS         Acral Melanoma
    

    【讨论】:

    • 感谢@Phil 的解决方案和关于 for 循环的智慧,我已经在使用 dplyr 但没有使用此功能!
    【解决方案2】:

    您可以使用 merge() 进行右外连接。该函数会自动匹配列名,因此请确保 df1 中的“Cancer”和 df2 中的“Acronym”具有相同的名称。

    colnames(df2)[1] <- 'Cancer'
    df.new <- merge(x = df, y = df2, by = "Cancer", all.y = TRUE)
    

    这为您提供了一个新的数据框,其中包含首字母缩写词、全名和您可以在之后过滤的基因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多