gpt4 book ai didi

r - 如何根据连续序列过滤满足条件的行?

转载 作者:行者123 更新时间:2023-12-04 10:33:16 24 4
gpt4 key购买 nike

我想在一行中出现特定值序列的条件下对数据框中的行进行子集化。例如,如果在其中一个变量中有一个模式 2 | 4 | 5 一行接一行,那这三行会被保留,然后继续查找,直到找到另一组行,再找到另一组 2 | 4 | 5. 最后,我想对每组 2 | 进行 group_by() | 4 | 5 并取另一列中相应值的平均值。

我曾尝试使用各种滞后命令,但无法让它发挥作用。理想情况下,解决方案是使用 dplyr。

给出下表

# A tibble: 24 x 2
information.content scale_degree
<dbl> <dbl>
1 4.95 0
2 2.98 2
3 2.13 4
4 2.46 2
5 2.49 4
6 1.75 5
7 1.95 7
8 2.54 5
9 0.969 4
10 1.45 2
11 2.10 4
12 2.37 2
13 2.07 4
14 1.29 5
15 1.43 7
16 4.05 7
17 2.05 5
18 0.740 4
19 1.07 2
20 1.92 0
21 2.54 2
22 1.72 4
23 1.69 2
24 1.85 0

structure(list(information.content = c(4.951615, 2.9770234, 2.1338997, 
2.4575028, 2.4881902, 1.7465432, 1.9471669, 2.5410578, 0.96890986,
1.4460193, 2.0989947, 2.3660812, 2.0733728, 1.2867087, 1.4285704,
4.048128, 2.0472896, 0.74006027, 1.0694636, 1.9193107, 2.5353878,
1.721423, 1.6873852, 1.8456767), scale_degree = c(0, 2, 4, 2,
4, 5, 7, 5, 4, 2, 4, 2, 4, 5, 7, 7, 5, 4, 2, 0, 2, 4, 2, 0)), row.names = c(NA,
-24L), class = c("tbl_df", "tbl", "data.frame"))

我想要以下结果(没问题后会知道如何分组和平均)

# A tibble: 6 x 3
information.content scale_degree instance
<dbl> <dbl> <dbl>
1 2.46 2 1
2 2.49 4 1
3 1.75 5 1
4 2.37 2 2
5 2.07 4 2
6 1.29 5 2

structure(list(information.content = c(2.4575028, 2.4881902, 
1.7465432, 2.3660812, 2.0733728, 1.2867087), scale_degree = c(2,
4, 5, 2, 4, 5), instance = c(1, 1, 1, 2, 2, 2)), class = c("spec_tbl_df",
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -6L), spec = structure(list(
cols = list(information.content = structure(list(), class = c("collector_double",
"collector")), scale_degree = structure(list(), class = c("collector_double",
"collector")), instance = structure(list(), class = c("collector_double",
"collector"))), default = structure(list(), class = c("collector_guess",
"collector")), skip = 1), class = "col_spec"))

最佳答案

dplyr 的一个想法可能是利用 lead 函数,即

library(dplyr)

df %>%
mutate(new = cumsum(ifelse(scale_degree == 2 &
lead(scale_degree, n = 1) == 4 &
lead(scale_degree, n = 2) == 5, 1, 0))) %>%
filter(new != 0) %>%
group_by(new) %>%
slice(1L:3L)

这给出了,

# A tibble: 6 x 3
# Groups: new [2]
information.content scale_degree new
<dbl> <dbl> <dbl>
1 2.46 2 1
2 2.49 4 1
3 1.75 5 1
4 2.37 2 2
5 2.07 4 2
6 1.29 5 2

关于r - 如何根据连续序列过滤满足条件的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57201097/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com