我有此列表l
l
$`5216014`
$`5216014`[[1]]
name key rank
1 Animalia 1 kingdom
2 Chordata 44 phylum
3 Elasmobranchii 121 class
4 Rajiformes 884 order
5 Rajidae 5877 family
6 Raja 2342057 genus
7 Raja montagui 5216014 species
$`5216208`
$`5216208`[[1]]
name key rank
1 Animalia 1 kingdom
2 Chordata 44 phylum
3 Elasmobranchii 121 class
4 Rajiformes 884 order
5 Rajidae 5877 family
6 Amblyraja 2420436 genus
7 Amblyraja radiata 2420446 species
我只想提取row
和name
列的key
数字7并创建一个像这样的数据库:
df
name key
Raja montagui 5216014
Amblyraja radiata 2420446
我尝试使用lapply
函数:
lapply(l,function(x) x[7])
但是结果是这样的:
$`5216014`
$`5216014`[[1]]
NULL
$`5216208`
$`5216208`[[1]]
NULL
我试图在数据框中转换l
:
data.frame(matrix(unlist(l)))
但是我获得了一个大列,其中所有数据为:
kingdom
phylum
class
order
family
genus
species
Animalia
Chordata
Elasmobranchii
4943
Rajiformes
Rajidae
Raja
Raja montagui
1
44
121
884
5877
2342057
5216014
4954
kingdom
phylum
class
order
family
genus
species
Animalia
Chordata
Elasmobranchii
Rajiformes
4965
Rajidae
Amblyraja
Amblyraja radiata
1
44
121
884
5877
2420436
2420446
kingdom
phylum
class
order
family
genus
species
我在哪里错了?
P.S:这种list
l
是软件包rgbif
的输出,代码为
keySpecies <- c(5216014,2420446)
l.1 <- occ_search(taxonKey=keySpecies,
limit=1, return='hier',
curlopts=list(verbose=F))
l <- l.1[c(1:length(unique(keySpecies)))] #cut all element of list that are not useful
答案 0 :(得分:1)
lapply(l,function(x) x[7])
已经结束,但是您需要索引[row, column]
,而不仅仅是[row]
。而是这样做:
res = lapply(l,function(x) x[7, c("name", "key")])
# or more simply
res = lapply(l, "[", 7, c("name", "key"))
这仍然会为您提供list
,您需要将其合并到一个数据框中:
do.call(rbind, res)
编辑:我安装了您的软件包并运行了您的代码,显然l
是数据帧列表的列表,而不是数据帧列表。所以我们也需要提取它:
res = lapply(lapply(l, "[[", 1), "[", 7, c("name", "key"))
res = do.call(rbind, res)
res
# name key
# 5216014 Raja montagui 5216014
# 2420446 Amblyraja radiata 2420446