首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将具有关系(A-1、A-2、A-3、B-2、B-4、B-5等)的成对数据文件解析为R中类似字典的结构

如何将具有关系(A-1、A-2、A-3、B-2、B-4、B-5等)的成对数据文件解析为R中类似字典的结构
EN

Stack Overflow用户
提问于 2020-01-13 12:55:06
回答 3查看 37关注 0票数 0

我是一名红宝石开发人员,但我需要在R中开发我的最后工作学位的一部分,我正在读这样的文件:

代码语言:javascript
复制
genes = read.delim(opt$pregeneset)

其内容如下:

代码语言:javascript
复制
              GVR    ENTREZ
1   chr15.gvr7.17    114791
2   chr15.gvr7.17    283767
3   chr15.gvr7.17 100996331
4   chr15.gvr7.17    390538
5   chr15.gvr7.17    283694
6   chr15.gvr8.16    123606
7   chr15.gvr8.16     81614
8   chr15.gvr8.16     23191
9   chr15.gvr9.15    283685
10  chr15.gvr9.15      7681

我想用这样的字典结构来转换这些数据:

代码语言:javascript
复制
gvr_data = {"chr15.gvr7.17": [114791, 283767, 100996331, 390538, 283694],
 "chr15.gvr8.16": [123606, 81614, 23191], 
 "chr15.gvr9.15": [283685, 7681]}

诸若此类。通常,我会在GVR上迭代,将"i“项保存为键,并将数组中的"i”项作为生成前面显示的字典/哈希映射的值,但我不知道如何在R中这样做。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-01-13 13:07:11

你想要一个名单,你可以这样得到它:

代码语言:javascript
复制
result <- lapply(split.data.frame(genes, genes$GVR), function(x) x$ENTREZ)
print(result)
#> $`chr15.gvr7.17`
#> [1]    114791    283767 100996331    390538    283694
#> 
#> $chr15.gvr8.16
#> [1] 123606  81614  23191
#> 
#> $chr15.gvr9.15
#> [1] 283685   7681

现在,您可以使用$操作符访问任何一个向量,如下所示:

代码语言:javascript
复制
result$chr15.gvr9.15
#> [1] 283685   7681
票数 1
EN

Stack Overflow用户

发布于 2020-01-13 13:27:21

下面是基R的两种输出类型,其中一种可能是您想要的

  • 解决方案1:输出为数据帧

代码语言:javascript
复制
gvr_data_df  <- aggregate(ENTREZ~GVR, genes, FUN = function(x) x)

> gvr_data_df
            GVR                                    ENTREZ
1 chr15.gvr7.17 114791, 283767, 100996331, 390538, 283694
2 chr15.gvr8.16                      123606, 81614, 23191
3 chr15.gvr9.15                              283685, 7681

  • 解决方案2:输出为list

代码语言:javascript
复制
gvr_data_lst <- lapply(split(genes,genes$GVR),`[[`,2)

> gvr_data_lst
$chr15.gvr7.17
[1]    114791    283767 100996331    390538    283694

$chr15.gvr8.16
[1] 123606  81614  23191

$chr15.gvr9.15
[1] 283685   7681
票数 0
EN

Stack Overflow用户

发布于 2020-01-13 13:29:35

已经有一个公认的答案,但这里有另一个答案,也许更像公布的预期结果。

代码语言:javascript
复制
aggregate(ENTREZ ~ GVR, genes, function(x){
  x <- paste(x, collapse = ', ')
  paste0('[', x, ']')
})
#            GVR                                      ENTREZ
#1 chr15.gvr7.17 [114791, 283767, 100996331, 390538, 283694]
#2 chr15.gvr8.16                      [123606, 81614, 23191]
#3 chr15.gvr9.15                              [283685, 7681]

或者是JSON格式。

代码语言:javascript
复制
agg <- aggregate(ENTREZ ~ GVR, genes, paste)
jsonlite::toJSON(agg, "values", pretty = TRUE)
#[
#  ["chr15.gvr7.17", ["114791", "283767", "100996331", "390538", "283694"]],
#  ["chr15.gvr8.16", ["123606", "81614", "23191"]],
#  ["chr15.gvr9.15", ["283685", "7681"]]
#] 

数据.

代码语言:javascript
复制
genes <- read.table(text = "
              GVR    ENTREZ
1   chr15.gvr7.17    114791
2   chr15.gvr7.17    283767
3   chr15.gvr7.17 100996331
4   chr15.gvr7.17    390538
5   chr15.gvr7.17    283694
6   chr15.gvr8.16    123606
7   chr15.gvr8.16     81614
8   chr15.gvr8.16     23191
9   chr15.gvr9.15    283685
10  chr15.gvr9.15      7681
", header = TRUE)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59717074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档