【发布时间】: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_1 和 data$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))) -
谢谢 - 如果您想发布它,很高兴将此作为答案。