Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.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_Data.table_Conditional_Vectorization - Fatal编程技术网

R 通过给定变量查找条件的第一个匹配项

R 通过给定变量查找条件的第一个匹配项,r,data.table,conditional,vectorization,R,Data.table,Conditional,Vectorization,我有数据 library(data.table); set.seed(42) dat <- data.table(id=c(1,1,1,2,2,3,3,3,3,3,4,5,5,5,5), x=rnorm(15)) > dat # id x # 1: 1 1.37095845 # 2: 1 -0.56469817 # 3: 1 0.36312841 # 4: 2 0.63286260 # 5: 2 0.40426832 # 6: 3 -0.

我有数据

library(data.table); set.seed(42)
dat <- data.table(id=c(1,1,1,2,2,3,3,3,3,3,4,5,5,5,5), x=rnorm(15))
> dat
#    id           x
# 1:  1  1.37095845
# 2:  1 -0.56469817
# 3:  1  0.36312841
# 4:  2  0.63286260
# 5:  2  0.40426832
# 6:  3 -0.10612452
# 7:  3  1.51152200
# 8:  3 -0.09465904
# 9:  3  2.01842371
#10:  3 -0.06271410
#11:  4  1.30486965
#12:  5  2.28664539
#13:  5 -1.38886070
#14:  5 -0.27878877
#15:  5 -0.13332134

我希望可以使用
data.table
,因为这一直让我惊讶于它的效率,但是其他一些可以快速完成这项工作的功能也可以工作

我们可以在
i
中指定条件,按“id”分组,使用
.i
获取第一个元素的索引,提取列(
$V1


使用
tidyverse
,这一点出人意料地困难

library(tidyverse)

dat %>% 
 mutate(rn = row_number()) %>% 
 filter(x > 0) %>% 
 group_by(id) %>% 
 slice(1L) %>% 
 pull(rn)

#[1]  1  4  7 11 12

如果有一些id不满足条件,我们希望为它们使用NA:
dat[(id=unique(id),x_dn=0),on=(id,x>x_dn),mult=“first”,which=TRUE]
dat[x >0, .I[1], id]$V1
#[1]  1  4  7 11 12
library(tidyverse)

dat %>% 
 mutate(rn = row_number()) %>% 
 filter(x > 0) %>% 
 group_by(id) %>% 
 slice(1L) %>% 
 pull(rn)

#[1]  1  4  7 11 12