我试图使用自定义函数管道mutate语句.我看起来有点类似的SO帖子但是徒劳无功.假设我有一个这样的数据框(其中blob一些变量与特定任务无关,但是是整个数据的一部分):
df <-
data.frame(exclude=c('B','B','D'),
B=c(1,0,0),
C=c(3,4,9),
D=c(1,1,0),
blob=c('fd', 'fs', 'sa'),
stringsAsFactors = F)
Run Code Online (Sandbox Code Playgroud)
我有一个使用变量名的函数,所以根据exclude列中的值选择一些,例如计算未指定的变量的总和exclude(总是单个字符).
FUN <- function(df){
sum(df[c('B', 'C', 'D')] [!names(df[c('B', 'C', 'D')]) %in% df['exclude']] )
}
Run Code Online (Sandbox Code Playgroud)
当我给出一行(第1行)时,FUN我得到预期的C和D(和那些未提及的exclude),即4:
FUN(df[1,])
Run Code Online (Sandbox Code Playgroud)
如何在具有mutate的管道中进行类似操作(将结果添加到变量中s).这两次尝试不起作用:
df %>% mutate(s=FUN(.))
df %>% group_by(1:n()) %>% mutate(s=FUN(.))
Run Code Online (Sandbox Code Playgroud)
更新 这也不能按预期工作:
df %>% rowwise(.) %>% mutate(s=FUN(.))
Run Code Online (Sandbox Code Playgroud)
这是有原因的,但不在dplyr的mutate(和管道)中:
df$s <- sapply(1:nrow(df), function(x) FUN(df[x,]))
Run Code Online (Sandbox Code Playgroud)