我需要转换此格式,基本上你有1个基因ID(第一个col),最多5个可能的值在第3列中关联:
TMCS09g1008676 fleshy 0.000234939
TMCS09g1008676 fleshy 1.38379E-05
TMCS09g1008676 fleshy 0.00331883
TMCS09g1008677 fleshy 0.0481578
TMCS09g1008678 fleshy 0.0350491
TMCS09g1008679 fleshy 0.0335639
TMCS09g1008680 fleshy 0.0167087
TMCS09g1008681 fleshy 0.00301089
TMCS09g1008682 fleshy 0.00519838
TMCS09g1008682 fleshy 0.0399833
TMCS09g1008682 fleshy 0.0122184
TMCS09g1008683 fleshy 0.00202427
TMCS09g1008683 fleshy 0.00199513
TMCS09g1008683 fleshy 0.0350491
TMCS09g1008683 fleshy 0.00331883
TMCS09g1008683 fleshy 0.0399833
这里你有与每个基因ID(第一个col)相关联的所有可能值,用tab分隔(因此最多可填充5个字段):
TMCS09g1008676 0.000234939 1.38379E-05 0.00331883
TMCS09g1008677 0.0481578
TMCS09g1008678 0.0350491
TMCS09g1008679 0.0335639
TMCS09g1008680 0.0167087
TMCS09g1008681 0.00301089
TMCS09g1008682 0.00519838 0.0399833 0.0122184
TMCS09g1008683 0.00202427 0.00199513 0.0350491 0.00331883 0.0399833
我非常感谢R的一些迹象。
答案 0 :(得分:1)
以下是使用dplyr
包的一种解决方案。您可以根据您未提供的列名调整代码。
library(dplyr)
df <- read.table(text = "TMCS09g1008676 fleshy 0.000234939
TMCS09g1008676 fleshy 1.38379E-05
TMCS09g1008676 fleshy 0.00331883
TMCS09g1008677 fleshy 0.0481578
TMCS09g1008678 fleshy 0.0350491
TMCS09g1008679 fleshy 0.0335639
TMCS09g1008680 fleshy 0.0167087
TMCS09g1008681 fleshy 0.00301089
TMCS09g1008682 fleshy 0.00519838
TMCS09g1008682 fleshy 0.0399833
TMCS09g1008682 fleshy 0.0122184
TMCS09g1008683 fleshy 0.00202427
TMCS09g1008683 fleshy 0.00199513
TMCS09g1008683 fleshy 0.0350491
TMCS09g1008683 fleshy 0.00331883
TMCS09g1008683 fleshy 0.0399833")
df %>% group_by(V1) %>% slice(1:5) %>% summarise(V3 = paste(V3, collapse = ' '))
# A tibble: 8 x 2
V1 V3
<fctr> <chr>
1 TMCS09g1008676 0.000234939 1.38379e-05 0.00331883
2 TMCS09g1008677 0.0481578
3 TMCS09g1008678 0.0350491
4 TMCS09g1008679 0.0335639
5 TMCS09g1008680 0.0167087
6 TMCS09g1008681 0.00301089
7 TMCS09g1008682 0.00519838 0.0399833 0.0122184
8 TMCS09g1008683 0.00202427 0.00199513 0.0350491 0.00331883 0.0399833
在上文中,slice
将每组的值限制为5。
编辑:似乎所需的输出是五个值中每个值的多列。这是一个解决方案:
library(tidyr)
library(dplyr)
df %>% select(-V2) %>% group_by(V1) %>% slice(1:5) %>% mutate(valueId = paste0('value', row_number())) %>% spread(valueId, V3)
这可以写入带有制表符分隔符的文件,并作为制表符分隔文件回读。