访问以“矢量化”方式组织到R中的列表中的数据帧内的特定单元

时间:2016-07-08 13:19:39

标签: r list dataframe

这是我的第一个问题,对不起可能出现的错误。

在流式传输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

我想这应该是非常简单的事情

1 个答案:

答案 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