2015-05-06 17 views
5

Tôi có một khung dữ liệu như thế nàyrowSums đột biến loại trừ một cột

> 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 

Muốn đột biến nó bằng cách thêm cột x, y, và z (có thể có nhiều cột số nhiều). Cố gắng loại trừ cột 'a' như sau không hoạt động.

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

này cũng tạo ra một lỗi:

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

đúng cách là gì?

Trả lời

7

Nếu bạn muốn giữ lại các cột không phải số trong kết quả, bạn có thể làm điều này:

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

anh chàng này! tốt đẹp. – d8aninja

1

này nên làm việc:

#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(.)) 

Đầu tiên loại trừ cột văn bản - a, sau đó làm rowSums trên cột số còn lại.

+0

Tôi cố gắng đó , nhưng sau đó khung dữ liệu kết quả bỏ lỡ cột a. Tôi muốn giữ nó. Đang thêm lại tùy chọn duy nhất? – Gopala

+0

@ user3949008 xem câu trả lời của eipi10, giữ cột 'a'. – zx8754

1

Bạn có thể sử dụng bộ chọn phong phú với select() bên trong gọi đến rowSums()

df %>% transmute(a, total = rowSums(select(., -a))) 
Các vấn đề liên quan