使用mutate_应用行式Reduce?

时间:2016-07-12 07:44:26

标签: r dplyr nse

我有一个包含大量列的数据框,其中包括四个代表子类的列。

data.frame(site_name=c("bla","blo","blu"), page_1=c(NA,NA,NA), page_2=c(NA,"detail_1","detail_2"), page_3=c("hello", "hola", NA), page_4=c(NA,NA,NA)) 

  site_name page_1   page_2 page_3 page_4
1       bla     NA     <NA>  hello     NA
2       blo     NA detail_1   hola     NA
3       blu     NA detail_2   <NA>     NA

我想用一列替换所有这些'page_x'列,仅显示最右边的非NA级别的详细信息。有许多行问题,但我找不到一个使用NSE和Reduce的人。

在上面的示例中,将是:

  site_name page_1   page_2 page_3 page_4     page
1       bla     NA     <NA>  hello     NA    hello
2       blo     NA detail_1   hola     NA     hola
3       blu     NA detail_2   <NA>     NA detail_2

我认为在每行使用Reduce是一个很好的例子。我有一个版本可以在一行中使用,但我找不到将其应用于mutate _的方法。

Reduce(function(prec,col){ifelse(!is.na(row[col]), row[col], prec)},
       grep("^page",names(row),value=T), NA)}

这不起作用(因为我猜''row'对象并没有真正以这种方式传递):

mutate_(.dots = ~Reduce(function(prec,col){ifelse(!is.na(row[col]), row[col], prec)},
       grep("^page",names(row),value=T), NA)}

1 个答案:

答案 0 :(得分:0)

这是一个不同的想法,没有NSMakeRange

Reduce