问题描述
目前我有一个数据框,其中包含独特癌症类型的首字母缩写词 (hotspot_mockup),如下所示:
癌症 | 基因 |
---|---|
AASTR | IDH1 |
ACRM | 国家税务局 |
在另一个数据框中,我列出了这 184 个独特的首字母缩略词及其对应的全名 (new_hotspot_cancers)。这是形式:
缩写 | 全名 |
---|---|
AASTR | 间变性星形细胞瘤 |
ACRM | 肢端黑色素瘤 |
我想用第二个数据框中相应的全名替换第一个数据框中的首字母缩略词(当然,假设首字母缩略词存在于第二个数据框中)。总的来说,我希望结果如下:
癌症 | 基因 |
---|---|
间变性星形细胞瘤 | IDH1 |
肢端黑色素瘤 | 国家税务局 |
我在考虑某种“for”循环,但我知道这在 R 中是不受欢迎的。与往常一样,任何指导将不胜感激!
解决方法
我在考虑某种“for”循环,但我知道这在 R 中是不受欢迎的。
并不是因为它不受欢迎,而是那些有其他编程语言经验的人倾向于在不需要的时候在 R 中使用 for 循环——要么是因为 R 默认矢量化,要么是因为有 {{1} 之类的函数} 或 lapply()
来自 map()
包,可以更有效地完成 for 循环的工作。
在这种情况下,您可以从 purrr
包中执行 left_join()
。
dplyr
,
您可以使用merge() 进行右外连接。该函数会自动匹配列名,因此请确保 df1 中的 'Cancer' 和 df2 中的 'Acronym' 具有相同的名称。
colnames(df2)[1] <- 'Cancer'
df.new <- merge(x = df,y = df2,by = "Cancer",all.y = TRUE)
这为您提供了一个包含首字母缩略词、全名和基因的新数据框,之后您可以对其进行过滤。