【发布时间】:2016-03-04 03:12:44
【问题描述】:
我有一个多步骤问题。第一步:将一个字符串 (df1) 中的文本从一列匹配到另一列范围 (df2)。没有匹配的列的顺序,并且匹配可以发生在范围内的任何位置。找到匹配后,将 df2 行匹配复制到 df1。最后,对整列重复。
df1= structure(list(Assay = c("ATG_AR_trans_up","NVS_PXR_cis","BSK_VCAM1_up"), p.value = c(0.01,0.05,0.0001)), .Names = c("Assay", "p.value"),row.names = c(NA, 3L), class = "data.frame")
df1
Assay p.value
ATG_AR_trans_up 0.01
NVS_hPXR 0.065
BSK_VCAM1_up 0.001
df2=structure(list(GeneID = c("AR", "VACM1", "TR", "ER", "PXR"), Assay1= c("ATG_ARE_cis", "BSK_hEDG_VCAM1", "NVS_TR_tran", "ATG_ER_UP", "NVS_PXRE_UP"), Assay2= c("ATG_AR_trans_up", "BSK_BE3K_VCAM1", "NA", "ATG_ERE_cis", "ATG_PXRE_cis"), Assay3= c("NVS_AR_trans", "BSK_VCAM1_UP", "NA", "NVS_ERa_CIS", "NVS_PXR_cis"), Assay4= c("Tox21_AR_ARE","NA", "NA", "Tox21_ERaERb_lig", "NA")), .Names = c("GeneID", "Assay1", "Assay2", "Assay3", "Assay4"),row.names = c(NA, 5L), class = "data.frame")
df2
GeneID Assay1 Assay 2 Assay3
AR ATG_ARE_cis NVS_hAR ATG_AR_trans_up
VACM1 BSK_hEGF_CAM1 BSK_VCAM1_up BSK_VCAM1_down
TR NVS_TR_tran NA NA
ER ATG_ER_UP ATG_ERE_cis NVS_ERa_CIS
PXR ATG_PXR_down ATG_PXRE_cis NVS_hPXR
基本上变成
df
Assay p.value GeneID Assay1 Assay2 Assay3
ATG_AR_trans_up 0.01 AR ATG_ARE_cis NVS_hAR ATG_AR_trans_up
NVS_hPXR 0.065 PXR ATG_PXR_down ATG_PXRE_cis NVS_hPXR
BSK_VCAM1_up 0.001 VCAM1 BSK_hEGF_CAM1 BSK_VCAM1_up BSK_VCAM1_down
为简洁起见,我大大缩短了 df,但它大约需要 88 个 Assays 和 4,000 行才能进行一场比赛(大约有 30 行)。所以我最初的直觉是循环,但有人告诉我grep 可能是一个有用的包(即使它不适用于 R 3.2.2)。任何帮助都将不胜感激。
【问题讨论】:
-
你的例子太小了。尝试添加更多匹配项以显示所需的输出。
-
好的。我会尽力。让我知道是否可以接受修改
-
您可以编辑问题。
-
你也应该使用
dput来存放你的例子,这样人们就不必手动复制你的dfs了 -
我添加了数据框。希望这会让它更容易理解......虽然我认为我让它更令人困惑。
标签: r formatting match data-management