gpt4 book ai didi

r - 用列表填充矩阵,其中列表中的每个向量可能是 1 - 7 个元素 [R]

转载 作者:行者123 更新时间:2023-12-04 00:29:49 27 4
gpt4 key购买 nike

说我有一些';'向量中的分离信息,我想使用 strsplit 将其分开。 data 包含如下所示的信息:

[1] "k__Fungi; p__Ascomycota; c__Eurotiomycetes; o__unidentified; f__unidentified; g__unidentified; s__Eurotiomycetes sp"
[2] "k__Fungi; p__Basidiomycota; c__Agaricomycetes; o__Agaricales; f__Mycenaceae; g__unidentified; s__Mycenaceae sp"
[3] "k__Fungi; p__Ascomycota"
[4] "None"
[5] "k__Fungi; p__Glomeromycota; c__Glomeromycetes; o__Glomerales; f__Glomeraceae; g__Glomus; s__Glomus macrocarpum"
[6] "k__Fungi; p__Basidiomycota; c__Agaricomycetes; o__Agaricales; f__Inocybaceae; g__Inocybe"

我使用 strsplit 像这样分离出这些信息:

list<- strsplit(data,split=";")

它的输出是

[[1]]
[1] "k__Fungi" " p__Ascomycota" " c__Eurotiomycetes" " o__unidentified" " f__unidentified" " g__unidentified" " s__Eurotiomycetes sp"

[[2]]
[1] "k__Fungi" " p__Basidiomycota" " c__Agaricomycetes" " o__Agaricales" " f__Mycenaceae" " g__unidentified" " s__Mycenaceae sp"

[[3]]
[1] "k__Fungi" " p__Ascomycota"

[[4]]
[1] "None"

[[5]]
[1] "k__Fungi" " p__Glomeromycota" " c__Glomeromycetes" " o__Glomerales" " f__Glomeraceae" " g__Glomus" " s__Glomus macrocarpum"

[[6]]
[1] "k__Fungi" " p__Basidiomycota" " c__Agaricomycetes" " o__Agaricales" " f__Inocybaceae" " g__Inocybe"

然后我想将此信息推送到一个矩阵中,该矩阵的格式为原始数据对象的长度和 7 个命名列。我生成一个这样的空矩阵:

out<- matrix(nrow=(length(data)),ncol=7)
colnames(out)<-c("kingdom","phylum","class","order","family","genus","species")

空矩阵最终看起来像这样:

     kingdom phylum class order family genus species
[1,] NA NA NA NA NA NA NA
[2,] NA NA NA NA NA NA NA
[3,] NA NA NA NA NA NA NA
[4,] NA NA NA NA NA NA NA
[5,] NA NA NA NA NA NA NA
[6,] NA NA NA NA NA NA NA

然后我想将 list 中的信息插入到矩阵中,这样如果列表中的第一个向量有 7 个元素,则第 1 行的所有 7 列都将有条目。但是,如果列表中的向量只有两个元素,则只有该矩阵行中的前两列有条目,其余的将保留为 NA 值。

**注意:我有意避免 for 循环。我有一个 for 循环解决方案,但是当我扩展到包含 100,000 行的数据集时它失败了。

最佳答案

你可以试试

library(stringi)
m1 <- stri_list2matrix(list, byrow=TRUE)
colnames(m1) <- c("kingdom","phylum","class","order","family","genus","species")

或者不使用strsplit,我们可以直接用read.table读取它

read.table(text=data, sep=";", fill=TRUE, stringsAsFactors=FALSE, na.strings='')

或者使用开发版的data.table

library(data.table)#v1.9.5+
setDT(list(data))[,tstrsplit(V1, '; ')]

关于r - 用列表填充矩阵,其中列表中的每个向量可能是 1 - 7 个元素 [R],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31169602/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com