如何从R中的数据框中提取每个条目名称的中点位置?

问题描述 投票:1回答:2

我有这个文件:

chromosome   start     end       name short.name start.gene  middle
chr8 7447754 7447754  SPAG11B_1    SPAG11B    7447754 7447754
chr8 7462707 7462707  SPAG11B_2    SPAG11B    7447754 7462707
chr8 7463443 7463443  SPAG11B_3    SPAG11B    7447754 7463443
chr8 7470308 7470308 DEFB104B_1   DEFB104B    7470308 7470308
chr8 7475011 7475011 DEFB104B_2   DEFB104B    7470308 7475011
chr8 7896474 7896474   DEFB4A_2     DEFB4A    7894677 7896474

我使用以下方式加载到R数据帧中:>

> df <- read.table("a", header=T)
> df
  chromosome   start     end       name short.name start.gene  middle
1       chr8 7447754 7447754  SPAG11B_1    SPAG11B    7447754 7447754
2       chr8 7462707 7462707  SPAG11B_2    SPAG11B    7447754 7462707
3       chr8 7463443 7463443  SPAG11B_3    SPAG11B    7447754 7463443
4       chr8 7470308 7470308 DEFB104B_1   DEFB104B    7470308 7470308
5       chr8 7475011 7475011 DEFB104B_2   DEFB104B    7470308 7475011
6       chr8 7896474 7896474   DEFB4A_2     DEFB4A    7894677 7896474

我现在需要提取一个包含每个唯一short.name的开始和结束位置中间的点的向量。例如,简称SPAG11B有3个条目,第一个start7447754,最后一个end7463443。因此,对于这个名称,我想获得0.5*(7447754+7463443),即7455598。对于所有其他short.name值也相同:

7455598 ## SPAG11B:  0.5*(7447754+7463443)
7472660 ## DEFB104B: 0.5*(7470308+7475011)
7896474 ## DEFB4A:   0.5*(7896474+7896474)

上面示例的最终结果将是具有以下值的向量:

7455598, 7472660, 7896474

我该怎么做?

我有这个文件:染色体开始结束名称short.name start.gene中间chr8 7447754 7447754 SPAG11B_1 SPAG11B 7447754 7447754 chr8 7462707 7462707 SPAG11B_2 SPAG11B ...

r dataframe
2个回答
2
投票

我们可以通过'short.name'分组,获得'middle'的firstlast元素,相加并乘以0.5


0
投票

您可以如下使用软件包data.table

© www.soinside.com 2019 - 2024. All rights reserved.