【问题标题】:Subset whole nested dataframe structure R子集整个嵌套数据框结构R
【发布时间】:2019-11-17 05:48:41
【问题描述】:

我在 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, ]

(索引保持不变,即如果data$nested_df_1 中的row_i 符合标准,那么data$nested_df_2$nested_df_2_1 中的row_i 也是如此。

但是我怎样才能为整个嵌套结构做子集呢?

【问题讨论】:

  • 你能显示预期的输出吗
  • 或许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)))
  • 谢谢 - 如果您想发布它,很高兴将此作为答案。

标签: r dataframe nested


【解决方案1】:

我们可以创建一个逻辑索引,循环遍历list,如果是data.framesubset,否则循环遍历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))) 

【讨论】:

    猜你喜欢
    • 2022-01-14
    • 2020-11-04
    • 2023-04-05
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 2014-10-03
    • 2014-04-27
    相关资源
    最近更新 更多