相关疑难解决方法(0)

R:行方式dplyr :: mutate使用带有数据帧行并返回整数的函数

我试图使用自定义函数管道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我得到预期的CD(和那些未提及的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)

row r dplyr mutate

8
推荐指数
2
解决办法
1万
查看次数

标签 统计

dplyr ×1

mutate ×1

r ×1

row ×1