Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何根据特定标准找到第一次出现_R - Fatal编程技术网

R 如何根据特定标准找到第一次出现

R 如何根据特定标准找到第一次出现,r,R,我有以下代理数据,我正在使用数据表 Id V1 V2 Aa 10 1000 Aa 20 90 Ab 20 90 Ab 20 90 Ab 20 100 As 50 90 As 300 150 As 150 0 我想创建另一个字段,为V2中大于

我有以下代理数据,我正在使用数据表

Id         V1       V2
Aa         10      1000
Aa          20       90
Ab          20       90
Ab          20       90
Ab          20       100
As          50       90
As          300     150
As           150     0
我想创建另一个字段,为V2中大于0的每个ID的第一次出现标记1。Ie见ID Ab,它只在第二个条目上标记为1

因此,我们可以这样说:

Id         V1       V2          Indicator
Aa         10      1000           1
Aa          20       90              0
Ab          20       0                0
Ab          20       90.             1
Ab          20       100.           0
As          50       90.             1
As          300     150.           0
As           150     0.              0
库(“data.table”)
df6[,id:=1.N]#创建唯一的行id
df6[,指示符:=0]#为指示符列的所有行分配0
#查找通过条件的id值,并将1分配给指标列
df6[id%in%df6[V2>0&V2<10000,.SD[1],by=(id)][,id],指示符:=-1]
df6[id%in%df6[V2>=10000,.SD[1],by=(id)][,id],指示符:=1]
df6[,id:=NULL]#删除id列
df6
#Id V1 V2指示器
#1:AA101000-1
#2:Aa 20 90 0
#3:Ab 20 0 0
#4:Ab 20 90-1
#5:Ab 20 100 0
#6:As 50 90-1
#7:As 300 150 0
#8:As 15000
#9:Ap 10 1000000 1
根据@Jaap的评论:

df6[, indicator := 0 ][
  df6[, .I[V2 > 0 & V2 < 10000][1], by = Id]$V1, indicator := -1][
    df6[, .I[V2 >= 10000][1], by = Id]$V1, indicator := 1]
df6[,指示符:=0][
df6[,.I[V2>0&V2<10000][1],by=Id]$V1,指标:=-1][
df6[,.I[V2>=10000][1],by=Id]$V1,指标:=1]
数据:我添加了一个值超过10K的额外行

df6 <- fread('Id         V1       V2
    Aa         10      1000
             Aa          20       90
             Ab          20       0
             Ab          20       90
             Ab          20       100
             As          50       90
             As          300     150
             As           150     0
             Ap         10      1000000', header = TRUE)

df6您确实需要在这里做一些尝试,因此这不是一个代码编写服务,我们在这里提供帮助,但我们不会为您完成所有工作;)或者:
df6[,indicator:=0][df6[,.I[V2>0][1],by=Id]$V1,indicator:=1][
谢谢你的支持。这确实奏效了。如果我想用它来做类似的事情,那会有什么变化,但我现在有两个条件。也就是说,这是数据:如果V2>10000,我想要1,但是如果V2回到10k以下,那么-1。id V1 V2指示器Aa 1000 1000 0 Aa 9800 10800 1 Ab 1500 0 Ab 30000 31500 1 Ab 1000 32500 Ab-30000 2500-1 As 1200 1200 0 As 14000 15200 1 As 0 15200 0
df6 <- fread('Id         V1       V2
    Aa         10      1000
             Aa          20       90
             Ab          20       0
             Ab          20       90
             Ab          20       100
             As          50       90
             As          300     150
             As           150     0
             Ap         10      1000000', header = TRUE)