2015-05-06 12 views
5

mam ramka danych, jak tomutować rowSums wykluczyć jedną kolumnę

> 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 

chcesz mutować dodając kolumny X, Y i Z (może być o wiele więcej kolumn numeryczne). Próba wyłączenia kolumny "a" w następujący sposób nie działa.

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

ta produkuje również błąd:

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

Co to jest właściwa droga?

Odpowiedz

7

Jeśli chcesz zachować kolumn nienumerycznych w rezultacie, można to zrobić:

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

ten facet! miły. – d8aninja

1

To powinno działać:

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

pierwsze wykluczyć kolumny tekstu - a, a następnie wykonać rowSums na pozostałych kolumn numerycznych.

+0

Próbowałem że , ale wynikowa ramka danych pomija kolumnę a. Chcę to zatrzymać. Czy dodawanie jest jedyną opcją? – Gopala

+0

@ user3949008 zobacz odpowiedź eipi10, która przechowuje kolumnę 'a'. – zx8754

1

można wykorzystywać bogate selektorów z select() wewnątrz zaproszenia do rowSums()

df %>% transmute(a, total = rowSums(select(., -a))) 
Powiązane problemy