无法获得价值,获得职位

时间:2020-09-19 19:57:59

标签: r

我试图获取第一个非零值,但是我正在使用代码获取位置。我知道我在代码中使用它时会得到这个,但是我需要这个值。请帮助我分享我的样本数据和我使用的R查询。

npm install

Current Output

Expected Output

1 个答案:

答案 0 :(得分:1)

我们可以将max.col与行索引一起使用来获取值。它比apply

更有效率
SamData$FirstInstAmt <- SamData[-1][cbind(seq_len(nrow(SamData)), 
             max.col(SamData[-1] != 0, 'first'))]

或者如果我们要使用apply

SamData$FirstInstAmt <- apply(SamData[-1], 1, function(x) x[x !=0][1])
SamData$FirstInstAmt
#[1] -1.4726888         NA  0.3435450         NA -0.8016447 
#[6] -1.2115839         NA         NA  0.4194970

或将pmapdplyr一起使用

library(dplyr)
library(purrr)
SamData %>%
    mutate(FirstInstAmt = pmap_dbl(.[-1], ~  {x <- c(...); x[x != 0][1]}))

或将c_acrossrowwise一起使用

SamData %>%
   rowwise %>%
   mutate(FirstInstAmt = {tmp <- c_across(FY12_April:FY12_June)
                tmp[tmp!= 0][1]})

或用NA替换0值,然后使用coalesce返回第一个非NA

SamData %>% 
     mutate(FirstInstAmt  =  coalesce(!!! .[-1] * NA^(!.[-1])))

注意:使用rowwise/c_acrosspmapapply可能会更慢,因为它们是循环。其中最有效的方法是基于索引(max.col)或在一定程度上基于coalesce/replace