我有一个包含大量列的数据框,其中包括四个代表子类的列。
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)}
答案 0 :(得分:0)
这是一个不同的想法,没有NSMakeRange
,
Reduce