mutate rowSums排除一列

Gop*_*ala 8 r dplyr

我有这样的数据框

> df
Source: local data frame [4 x 4]

      a x y z
1 name1 1 1 1
2 name2 1 1 1
3 name3 1 1 1
4 name4 1 1 1
Run Code Online (Sandbox Code Playgroud)

想要通过添加列x,y和z来变异(可以有更多的数字列).试图排除列'a'如下不起作用.

dft <- df %>% mutate(funs(total = rowSums(.)), -a)
Error: not compatible with STRSXP
Run Code Online (Sandbox Code Playgroud)

这也会产生错误:

dft <- df %>% mutate(total = rowSums(.), -a)
Error in rowSums(.) : 'x' must be numeric
Run Code Online (Sandbox Code Playgroud)

什么是正确的方法?

eip*_*i10 10

如果要在结果中保留非数字列,可以执行以下操作:

dat %>% mutate(total=rowSums(.[, sapply(., is.numeric)]))
Run Code Online (Sandbox Code Playgroud)

更新:现在dplyr有标准动词的范围版本,这是另一个选项:

dat %>% mutate(total=rowSums(select_if(., is.numeric)))
Run Code Online (Sandbox Code Playgroud)


jen*_*irf 5

您可以select()在调用内部使用丰富的选择器rowSums()

df %>% transmute(a, total = rowSums(select(., -a)))
Run Code Online (Sandbox Code Playgroud)