根据在 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)
的输出吗?
我在 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)
的输出吗?