我目前正在将我的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)
)
答案 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