我是一名红宝石开发人员,但我需要在R中开发我的最后工作学位的一部分,我正在读这样的文件:
genes = read.delim(opt$pregeneset)其内容如下:
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我想用这样的字典结构来转换这些数据:
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中这样做。
发布于 2020-01-13 13:07:11
你想要一个名单,你可以这样得到它:
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现在,您可以使用$操作符访问任何一个向量,如下所示:
result$chr15.gvr9.15
#> [1] 283685 7681发布于 2020-01-13 13:27:21
下面是基R的两种输出类型,其中一种可能是您想要的
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, 7681gvr_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发布于 2020-01-13 13:29:35
已经有一个公认的答案,但这里有另一个答案,也许更像公布的预期结果。
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格式。
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"]]
#] 数据.
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)https://stackoverflow.com/questions/59717074
复制相似问题