从适用于Purrr的pmap

时间:2019-06-19 14:29:55

标签: r purrr

我目前正在将我的Apply函数切换为purrr。我已经获得了一些命令的帮助,但是一旦增加了一定程度的复杂性,我就会陷入循环。我想知道下面的代码的替代方法是什么。目标是使用列名称查找每行记录的最近分数。再次,我给出功能(应用)代码。

dat = data.frame('SCORE_2010'=c(0,0,1,0),'SCORE_2011'=c(1,0,1,0),'SCORE_2012'=c(0,0,1,0),'SCORE_2013'=c(1,0,0,1))

dat[,'L_YEAR'] = apply(dat[,grepl('^SCORE_[0-9]+',names(dat))],
                       1,
                       function(x) 
                         ifelse(length(which(x==1))>0,str_extract(names(dat)[max(which(x==1))],'[0-9]+'),0)
                       )

1 个答案:

答案 0 :(得分:2)

我们可以使用pmap

library(tidyverse)
library(readr)
dat %>%
   mutate(L_YEAR = pmap(., ~ c(...) %>% 
               {names(which(. == 1)) %>% 
               last %>%
               parse_number}))

选项为max.col

library(readr)
parse_number(names(dat)[max.col(dat, 'last') * NA^(!rowSums(dat > 0))])
#[1] 2013   NA 2012 2013