gpt4 book ai didi

R如何根据以下行中的条件过滤数据框?

转载 作者:行者123 更新时间:2023-12-04 15:02:18 25 4
gpt4 key购买 nike

我有一个如下所示的数据框:

a<-c(1,1,-1,1,-1,1,-1,1,1,1,1)
b<-c(100,200,50,100,78,45,78,34,56,32,45)
c<-c(3,2,4,1,3,2,1,3,5,1,2)
d<-c(3400,3403,3407,3408,3412,3423,3436,3245,3234,3456,2345)
df<-cbind(a,b,c,d)
df
a b c d
[1,] 1 100 3 3400
[2,] 1 200 2 3403
[3,] -1 50 4 3407
[4,] 1 100 1 3408
[5,] -1 78 3 3412
[6,] 1 45 2 3423
[7,] -1 78 1 3436
[8,] 1 34 3 3245
[9,] 1 56 5 3234
[10,] 1 32 1 3456
[11,] 1 45 2 2345

其中包含更多行。我想按以下方式过滤:如果列 c = 3,我正在寻找以下行,它们具有与我的 c = 3 列相同的 a 和 b 列值,c 列值必须为 1 并且在这两个之间d 列中的行必须有 < 10 的差异。

所以在提供的示例中,输出应该是:

      a   b c    d
[1,] 1 100 3 3400
[4,] 1 100 1 3408

由于 a 和 b 列具有相同的值,因此 c 列的值为 3,后跟 1,并且 d 值之间的差异小于 10。例如,


a b c d
[5,] -1 78 3 3412
[7,] -1 78 1 3436

不应包含在输出中,因为在 d 列中,值之间的差异大于 10。

有没有可能实现它?抱歉,如果这是一个愚蠢的问题,我对 R 还很陌生。

编辑:新数据框:

       a   b c    d
[1,] 1 100 1 3400
[2,] 1 200 2 3403
[3,] -1 50 4 3407
[4,] 1 100 3 3408
[5,] -1 78 3 3412
[6,] 1 45 2 3423
[7,] -1 78 1 3436
[8,] -1 34 3 3445
[9,] 1 56 5 3234
[10,] -1 34 1 3454
[11,] 1 45 2 3645

期望的结果:

 [8,] -1  34 3 3445
[10,] -1 34 1 3454

仅应考虑第一行的 c 列 = 3 的成对,而不是第一行的 c 列条目 = 1 而第二行的条目 = 3 的情况。

最佳答案

我们可以转换成data.frame然后通过filter做一个group

library(dplyr)
df %>%
filter(c %in% c(3, 1)) %>%
group_by(a, b) %>%
filter(first(c) == 3, any(diff(d) < 10)) %>%
ungroup

# A tibble: 2 x 4
# a b c d
# <dbl> <dbl> <dbl> <dbl>
#1 1 34 3 3445
#2 1 34 1 3454

数据

 df<- data.frame(a,b,c,d)

关于R如何根据以下行中的条件过滤数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66770665/

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