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)