我有一个包含很多列的数据框,包括四个代表子类别的列。
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)}
这不起作用(因为我猜“行”对象并没有真正通过这种方式):
mutate_(.dots = ~Reduce(function(prec,col){ifelse(!is.na(row[col]), row[col], prec)},
grep("^page",names(row),value=T), NA)}