Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.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
使用dplyr以每个组或行的特定值获取第一列的索引_R_Dplyr_Purrr - Fatal编程技术网

使用dplyr以每个组或行的特定值获取第一列的索引

使用dplyr以每个组或行的特定值获取第一列的索引,r,dplyr,purrr,R,Dplyr,Purrr,我有以下脚本。选项1使用长格式和group_by识别状态为0的许多步骤的第一步 另一个选项(2)是使用apply为每行计算该值,然后将数据转换为长格式 firs选项无法很好地扩展。第二个是,但我无法将其放入dplyr管道。我试图用purr解决这个问题,但没有成功 问题: 为什么第一个选项不能很好地扩展 如何在dplyr管道中转换第二个选项 需要(dplyr) 需要(三年) 需要(ggplot2) 种子(314) #示例数据 dat% 聚集(步骤,状态,-id)%>% 分组依据(id)%>%

我有以下脚本。选项1使用长格式和
group_by
识别状态为0的许多步骤的第一步

另一个选项(2)是使用
apply
为每行计算该值,然后将数据转换为长格式

firs选项无法很好地扩展。第二个是,但我无法将其放入
dplyr
管道。我试图用
purr
解决这个问题,但没有成功

问题:

  • 为什么第一个选项不能很好地扩展
  • 如何在
    dplyr
    管道中转换第二个选项

需要(dplyr)
需要(三年)
需要(ggplot2)
种子(314)
#示例数据
dat%
聚集(步骤,状态,-id)%>%
分组依据(id)%>%
突变(drop=min(if_else(状态==0,匹配(步骤,步骤),99L))%>%
变异(状态=if_else(匹配(步骤,步骤)>=drop,0,1))
ggplot(数据累积,aes(x=阶跃,填充=因子(状态)))+
geom_bar()
#选择2更快
dat美元下降%
变异(状态=if_else(匹配(步骤,步骤)>=drop,0,1))
ggplot(数据累积,aes(x=阶跃,填充=因子(状态)))+
geom_bar()

如果要沿行映射,可以执行以下操作:

dat %>%
  mutate(drop2 = map_int(seq_len(nrow(dat)), ~ min(which(dat[.x, ] == 0L), 99L)))
可能是“收集和分组”比循环更快:

dat %>%
  as_tibble() %>%
  select(starts_with("step_")) %>%
  mutate(row_nr = row_number()) %>%    
  gather(key = "col", value = "value", -row_nr) %>%
  arrange(row_nr, col) %>%
  group_by(row_nr) %>%
  mutate(col_index = row_number()) %>%
  filter(value == 0) %>%
  summarise(drop3 = min(col_index)) %>%
  ungroup() %>%
  right_join(dat %>%
               mutate(row_nr = row_number()), 
             by = "row_nr") %>%
  mutate(drop3 = if_else(is.na(drop3), 99, drop3))

管道序列中的第二个选项可以是
dat%>%mutate(drop=apply(,1,函数(x)min(其中(x==0,99)))%>%gather(…