如何分离一个字符串并将其作为矢量读入R?

问题描述 投票:0回答:1

我有一个数据库,其中的一列包含以字符串形式的物种名称:

plant.first.id$sp.lst[42]

返回:

[1] ['Trema lamarckianum', 'Parasponia rigida', 'Trema tomentosum', 'Trema micranthum', 'Cannabis sativa']

我想用plant.first.id$sp.lst的整个列,然后将值转换成我可以操纵的向量。

例如,我想要这个:

> plant.first.id$sp.lst[3:5]
[1] []                                                                                                                                                        
[2] ['Ficus carica', 'Aphananthe philippinensis', 'Ficus insipida', 'Aphananthe monoica', 'Castilla elastica', 'Maclura cochinchinensis', 'Maclura fruticosa']
[3] ['Artocarpus tamaran']                                                                                                                                    

dput(plant.first.id$sp.lst[3:5])
structure(c(14L, 7L, 1L), .Label = c("['Artocarpus tamaran']", 
"['Artocarpus thailandicus']", "['Boronia algida', 'Zanthoxylum coreanum', 'Citrus reticulata']", 
"['Cissus integrifolia', 'Cissus populnea', 'Cissus hastata', 'Cissus trianae', 'Cissus penninervis', 'Cissus assamica']", 
"['Cryptandra amara', 'Broussonetia papyrifera', 'Serichonus gracilipes', 'Colubrina asiatica', 'Artocarpus tamaran', 'Artocarpus chama', 'Artocarpus thailandicus', 'Artocarpus rubrovenius', 'Gouania mauritiana']", 
"['Enterolobium gummiferum']", "['Ficus carica', 'Aphananthe philippinensis', 'Ficus insipida', 'Aphananthe monoica', 'Castilla elastica', 'Maclura cochinchinensis', 'Maclura fruticosa']", 
"['Maclura cochinchinensis']", "['Pouteria multiflora', 'Diospyros toposia', 'Van-royena castanosperma', 'Micropholis guyanensis', 'Pycnandra comptonii', 'Chrysophyllum venezuelanense']", 
"['Pouteria multiflora', 'Van-royena castanosperma', 'Chrysophyllum venezuelanense', 'Pycnandra comptonii', 'Micropholis guyanensis']", 
"['Trema lamarckianum', 'Cannabis sativa', 'Trema tomentosum', 'Parasponia rigida', 'Ficus annulata', 'Trema micranthum', 'Celtis iguanaea', 'Artocarpus thailandicus']", 
"['Trema lamarckianum', 'Ficus annulata', 'Parasponia rigida', 'Trema tomentosum', 'Trema micranthum', 'Cannabis sativa']", 
"['Trema lamarckianum', 'Parasponia rigida', 'Trema tomentosum', 'Trema micranthum', 'Cannabis sativa']", 
"[]"), class = "factor")

成为类似:

c("")
c('Ficus carica', 'Aphananthe philippinensis', 'Ficus insipida', 'Aphananthe monoica', 'Castilla elastica', 'Maclura cochinchinensis', 'Maclura fruticosa')
c('Artocarpus tamaran')

以列表形式。

我已经尝试过:

strsplit(as.vector(plant.first.id$sp.lst[42]),split = ",")

但是它不可用:

[[1]]
[1] "['Trema lamarckianum'" " 'Parasponia rigida'"  " 'Trema tomentosum'"   " 'Trema micranthum'"   " 'Cannabis sativa']"  

也这样:

gsub("[[(]", "(", plant.first.id$sp.lst[[42]])
gsub("]", ")", plant.first.id$sp.lst[[42]])

但仍然不是很有帮助...

[1] "('Trema lamarckianum', 'Parasponia rigida', 'Trema tomentosum', 'Trema micranthum', 'Cannabis sativa']"
[1] "['Trema lamarckianum', 'Parasponia rigida', 'Trema tomentosum', 'Trema micranthum', 'Cannabis sativa')"
r regex split
1个回答
3
投票

使用strplit删除多余的空格和撇号>>

y <- sapply(x, gsub, pattern = "^\\['?|'?]$", replacement = "")
strsplit(y, "', '")

[[1]]
character(0)

[[2]]
[1] "Ficus carica"              "Aphananthe philippinensis" "Ficus insipida"            "Aphananthe monoica"       
[5] "Castilla elastica"         "Maclura cochinchinensis"   "Maclura fruticosa"        

[[3]]
[1] "Artocarpus tamaran"
© www.soinside.com 2019 - 2024. All rights reserved.