mutate rowSums排除一列

时间:2015-05-06 18:44:01

标签: 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

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

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

这也会产生错误:

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

什么是正确的方法?

3 个答案:

答案 0 :(得分:10)

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

dat %>% mutate(total=rowSums(.[, sapply(., is.numeric)]))

更新:现在dplyr标准动词有scoped versions,这是另一种选择:

dat %>% mutate(total=rowSums(select_if(., is.numeric)))

答案 1 :(得分:4)

您可以在select()

的调用中使用带有rowSums()的丰富选择器
df %>% transmute(a, total = rowSums(select(., -a)))

答案 2 :(得分:1)

这应该有效:

#dummy data    
df <- read.table(text="a x y z

1 name1 1 1 1
2 name2 1 1 1
3 name3 1 1 1
4 name4 1 1 1",header=TRUE)

library(dplyr)

df %>% select(-a) %>% mutate(total=rowSums(.)) 

首先排除文本列 - a,然后对剩余的数字列执行rowSums