【发布时间】:2021-06-20 13:13:19
【问题描述】:
我有一个如下所示的数据框:
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 列中存在差异
所以在提供的示例中,输出应该是:
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 的情况。
【问题讨论】:
-
顺便说一句,
df<-cbind(a,b,c,d)返回matrix,而不是data.frame。你可能更喜欢df<-data.frame(a,b,c,d)
标签: r filter conditional-statements