0

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

癌症 基因
AASTR IDH1
客户关系管理 NRAS

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

首字母缩略词 全名
AASTR 间变性星形细胞瘤
客户关系管理 肢端黑色素瘤

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

癌症 基因
间变性星形细胞瘤 IDH1
肢端黑色素瘤 NRAS

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

4

2 回答 2

2

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

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

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

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
于 2021-06-14T14:49:45.990 回答
1

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

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

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

于 2021-06-14T14:53:18.893 回答