这是我的第一个问题,对不起可能出现的错误。
在流式传输jason文件后,我有一个“tt”数据帧列表。 一些数据帧是空的,一些是预定义的结构,这是一个例子:
> str(tt)
List of 2
$ :'data.frame': 0 obs. of 0 variables
$ :'data.frame': 2 obs. of 2 variables:
..$ key : chr [1:2] "issue_id" "letter_id"
..$ value: chr [1:2] "43" "223663"
> tt
[[1]]
data frame with 0 columns and 0 rows
[[2]]
key value
1 issue_id 43
2 letter_id 223663
我想得到一个列(例如名为“t”),其中issue_id是“tt”结构,所以
t [1] = NA(或NULL)
t [2] = 43
我可以将数据帧作为像这样的列表元素访问
> tt[[1]][1,2]
NULL
> tt[[2]][1,2]
[1] "43"
我怎样才能以“矢量化”的方式做到这一点?尝试了不同的事情,但没有成功,如
> t <- tt[[]][1,2]
Error in tt[[]] : invalid subscript type 'symbol'
> t <- tt[][1,2]
Error in tt[][1, 2] : incorrect number of dimensions
> t <- tt[[]][1][2]
Error in tt[[]] : invalid subscript type 'symbol'
> t <- tt[][1][2]
> t
[[1]]
NULL
我想这应该是非常简单的事情
答案 0 :(得分:0)
我们可以使用lapply
循环list
。由于存在空元素或者行数为零,我们跳过它并从其他元素中提取“值”。
lapply(tt, function(x) if(!(is.null(x)|!nrow(x))) with(x, value[key=="issue_id"]))
正如@MikeRSpencer在评论中提到的,如果我们需要提取第一个'价值'
sapply(tt, function(x) if(!(is.null(x)|!nrow(x))) x$value[1])
,它将返回vector