子集整个嵌套数据框结构R

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

我有一个在R中具有嵌套结构的数据集(某些单元格是其原始JSON结构的数组)。

set.seed(123)
data = list()
data$nested_df_1 = data.frame(a = letters[1:10]
                              , b = round(rnorm(10), 0))
data$nested_df_2 = list()
data$nested_df_2$nested_df_2_1 = data.frame(c = letters[11:20]
                                            , d = sample(-100:100, 10))

现在,我想对整个列表data进行子集化,以使其仅包括data$nested_df_1$b >= 0所在的所有实例(=所有结构中的所有行)。

> data$nested_df_1
   a  b
1  a -1
2  b  0
3  c  2
4  d  0
5  e  0
6  f  2
7  g  0
8  h -1
9  i -1
10 j  0

因此:需要从整个结构中删除第1、8、9行(即从data$nested_df_1data$nested_df_2$nested_df_2_1中删除。

如果我只是想在data$nested_df_1数据帧中使用它,我可以这样做:

data$nested_df_1 = data$nested_df_1[data$nested_df_1$b >= 0, ]

(索引保持恒定,即,如果row_i中的data$nested_df_1满足标准,那么对于row_i中的data$nested_df_2$nested_df_2_1也是如此)

但是如何为整个嵌套结构创建子集?

r dataframe nested
1个回答
1
投票

[我们可以创建一个逻辑索引,如果它是list data.frame,则遍历subset,否则就遍历listsubset(假设list嵌套的深度为2)] >

i1 <- data$nested_df_1$b >= 0
lapply(data, function(x) if(is.data.frame(x)) subset(x, i1) else
        lapply(x, function(y) subset(y, i1))) 
© www.soinside.com 2019 - 2024. All rights reserved.