根据在 R 中找到另一个结果的结果,从一个 table 中的列中添加一个值

Add a value from a column in one table based off finding a result in another in R

我在 R 中有一个数据 table:

  |gene           |   prom_65|   prom_66|  amast_69|  amast_70|  markerID|
  |:--------------|---------:|---------:|---------:|---------:|---------:| 
  |ABC            |   24.7361|   25.2550|   31.2974|45.4209   |16:123234_T/C; 16:54352342_A/T; 16:747564_T/G|
  |DFG            |  107.3580|  112.9870|   77.4182|   86.3211| 16:3453453_G/A; 16:765753453_A/T; 16:65345345_T/G| 
  |LKP            |   72.0639|   86.1486|   68.5747|   77.8383| 16:25234453_G/C; 16:876456546_A/T; 16:4535_T/G| 
  |KLF            |   43.8766|   53.4004|   34.0255|   38.4038| 16:87484_G/A; 16:5435_A/T; 16:747564_T/G|  
  |PPO            | 2382.8700| 1871.9300| 2013.4200| 2482.0600| 16:785_T/C; 16:5435_A/T; 16:747564_T/G| 
  |LWPV           |   49.6488|   53.7134|   59.1175|   66.0931| 16:123_T/C; 16:54564_A/T; 16:54646_T/G|

我还有一个数据table:

|markerid       |   prom_65|   prom_66|  amast_69|  amast_70|  pvalue|
|:--------------|---------:|---------:|---------:|---------:|---------:|
|16:123234_T/C |x         |     x    |       x  |       x  |     x    |
|16:3453453_G/A|  x       |    x     |     x            x  |       x  |

我想将 gene 列添加到 table 二中,以便与 table 一中的相关基因相匹配的 markerid。在 table 中,markerID 全部由分号分隔,并且 markerID 只会出现在 table1 中的一个基因行中。在此示例中,输出应如下所示:

|markerid       |   prom_65|   prom_66|  amast_69|  amast_70|  pvalue  |gene|
|:--------------|---------:|---------:|---------:|---------:|---------:|
|16:123234_T/C  |x         |     x    |       x  |       x  |     x    |ABC
|16:3453453_G/A |  x       |    x     |     x    |        x |       x  |DFG

不确定如何在 R 中处理此问题。

非常感谢

如果没有您的 table 的可重现示例,则很难确定最后一列看起来像什么(它似乎是一个列表但不确定)。

你可以试试第二个table:

Table2$gene <- sapply(Table2$markerid, function(x) Table1$Gene[grep(x,Table1$marker_id)])

这里有一个虚拟数据帧的例子:

dataA <- data.frame(Gene = LETTERS[1:5], 
                    marker = paste(letters[6:10],"_A"))

  Gene marker
1    A   f _A
2    B   g _A
3    C   h _A
4    D   i _A
5    E   j _A
dataB <- data.frame(marker = letters[6:8])
  marker
1      f
2      g
3      h

现在,如果您使用 sapply 函数:

dataB$Gene <- sapply(dataB$marker, function(x) dataA$Gene[grep(x,dataA$marker)])

1      f    A
2      g    B
3      h    C

它看起来像你想要得到的东西吗?

如果不工作,你能提供str(Table1)的输出吗?