簡體   English   中英

以“矢量化”方式訪問R中組織到列表中的數據幀內的特定單元

[英]Accessing particular cells within dataframes organized into list in R in a “vectorized” way

這是我的第一個問題,對不起可能的錯誤。

在流式傳輸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

我想這應該是非常簡單的事情

我們可以使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM