如何根据下一次出现在R中对数据帧进行子集化?

用户名

请允许我详细说明。基本上,我有一个包含4列的数据框,其中一列包含NA。当发生NA时,它们总是成组出现。我正在逐行浏览此数据帧,查看该列。我想做的是,一旦找到NA,就想在达到正常值之前,将数据帧从该行子集中到最后一次出现NA的行。

例如,假设我们看一下数据框df:

  C1 C2 C3 C4 C5 C6
R1 2  1  2  1  0  0
R2 2  2  1  1  0  0
R3 0  0  1  1  2  1
R4 2  2  1  NA 0  0
R5 0  0  1  NA 2  1
R6 0  0  1  NA 2  1
R7 2  2  1  NA 0  0
R8 0  0  1  1  2  1
R9 2  1  2  1  0  0
R10 2  2  1  1  0  0
R11 0  0  1  1  2  1
R12 2  2  1  NA 0  0
R13 0  0  1  NA 2  1
R14 0  0  1  NA 2  1

然后,当我逐行遍历df时,我遇到了第4行中的第一个NA,然后我想将第4行中的df子集到第7行,这是最后一个NA在此特定NA组中的位置。

子集:

R4 2  2  1  NA 0  0
R5 0  0  1  NA 2  1
R6 0  0  1  NA 2  1
R7 2  2  1  NA 0  0

请注意,我并没有使用NA来对所有行进行子集化,只是我正在查看的NA的当前“组”。我不是第12-14行的子集。

我该怎么做呢?

阿伦

一种方法是将连续NAs的id存储在列表中,然后将其存储为子集,但稍后再使用(使用lapply或显式for-loops

isna <- is.na(df$C4)
idx <- which(isna)
rr <- rle(isna)
idx <- split(idx, rep(seq(sum(rr$values)), rr$lengths[rr$values]))
# $`1`
# [1] 4 5 6 7

# $`2`
# [1] 12 13 14

它们对应于行号...现在,您可以子集化:

使用lapply

oo <- lapply(idx, function(ix) {
    this_sub <- df[ix, ]
    # do whatever you want
})

使用for-loop

for (i in seq_along(idx)) {
    this_sub <- df[idx[[i]], ]
    # do whatever you want
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在 R 中的 data.frame 中找到下一次出现?

根据R中的某些条件对数据帧进行子集

熊猫数据框按列值的下一次出现进行分组

在 R 中,如何根据向量中的值对数据帧的行进行子集

第一次标记基于参数的记录出现在r数据框中

如何基于R中的条件对数据帧进行子集

如何使用占位符在 r 中对数据帧进行子集化

如何像R中的SAS那样按列名对数据帧进行子集化?

如何使用选择输入在 r Shiny 中对数据帧进行子集化?

如何在 Visual Studio for Mac 中“添加下一次出现”?

如何根据R中列名中的数字条件对数据进行子集化?

根据向量列表对数据帧进行子集化

如何根据R中两列不匹配的值对数据框进行子集化?

如何根据R中的多个变量对数据框进行子集化

如何根据多个联合条件在 R 中对数据框进行子集化

如何基于基础R中的另一个数据帧对数据帧进行子集

如何根据用户指定的条件对数据帧进行子集

如何根据另一个数据框中的值对数据框进行子集化

如何在经过过滤的范围列中查找下一次出现的非NA值?

在 Pandas 中,如何按组中下一次出现的迭代项的顺序创建列

R:如何同时按条件和随机对数据帧进行子集化?

如何在R中使用grep选择精确匹配来对数据帧进行子集化

为什么我可以使用3维在R中对数据帧进行子集化?

计算下一次出现的细胞数

查找下一次出现的日期

查找下一次出现的时间,例如TemporalAdjuster

查找星期几的下一次出现

在vim中下一次出现{char}之后

求和值直到条件的下一次出现