r - 冗余基因列表简化
问题描述
当基本上你有 1 个基因 ID(第一个 col)时,我需要转换这种格式,在第 3 列中关联最多 5 个可能的值:
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(第一个列)相关的所有可能值,由制表符分隔(因此最多将填充 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 的一些迹象。
解决方案
这是使用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)
这可以用制表符分隔写出到文件中,并作为制表符分隔文件读回。
推荐阅读
- javascript - api请求后,数组在控制台中被拆分为多个数组
- python - 如何在 Bloomberg BQUANT 函数中使用 BQL?
- javascript - 适用于 Android 的 Chrome 上的间歇性视频编解码器错误(Galaxy 平板电脑)
- python - 如何修复“TypeError: 'function' object is not subscriptable”?
- python - 多个脚本/蜘蛛写入不同的 CSV 文件。这段代码会引起任何问题吗?
- django - 我不知道为什么我的页面没有分页我没有收到任何错误请帮助:)
- apache - ulimit:错误设置限制 - 不允许操作 - (在 ECS 上的容器中使用 apachectl)
- npm - 使用 yarns 将包添加到自定义 @frontend_components 或 lib 文件夹
- reactjs - React-Redux mapStateToProps 在状态更改时不会触发
- r - 如何用闪亮的反应性地 group_by() 和 summarise() 数据?