2017-01-07 2 views
2

У меня есть Тиббл, и я заметил, что комбинация dplyr::rowwise() и sum() не работает. Я знаю, что в этой теме много потоков, и у меня есть от 2 до 3 решений, но я не совсем понимаю, почему комбинация rowwise() и sum() не работает.Соотношение строк по тибетскому типу данных

Итак, мой вопрос : почему не сочетание rowwise() и sum() работы и что мы можем сделать, чтобы заставить его работать? Я новичок, поэтому считаю, что я делаю что-то неправильно в приведенном ниже коде.

данных:

dput(data) 
structure(list(Fiscal.Year = c(2016L, 2016L, 2016L, 2016L, 2016L, 
2016L, 2016L, 2016L, 2016L, 2016L), col1 = c(0, 26613797.764311, 
0, 12717073.587292, 0, 0, 0, 0, 0, 0), col2 = c(0, 0, 0, 0, 8969417.89721166, 
0, 11483606.8417117, 0, 0, 0), col3 = c(0, 0, 33251606.347943, 
0, 25082683.4492186, 0, 17337191.3014127, 0, 0, 0), col4 = c(0, 
0, 0, 0, 0, 0, 0, 0, 0, 0), col5 = c(0, 0, 0, 0, 0, 0, 0, 0, 
0, 9796823.229998), col6 = c(35822181.695755, 17475066.870565, 
0, 0, 0, 0, 4040695.327278, 0, 13117249.623068, 0), col7 = c(0, 
0, 0, 0, 0, 18347258.910001, 0, 0, 7002205.087399, 0), No.Trans = c(2987L, 
1292L, 1002L, 796L, 691L, 677L, 400L, 388L, 381L, 366L)), .Names = c("Fiscal.Year", 
"col1", "col2", "col3", "col4", "col5", "col6", "col7", "No.Trans" 
), row.names = c(NA, -10L), class = c("tbl_df", "tbl", "data.frame" 
)) 

Этот код не работает:

data %>% #No 
     dplyr::rowwise() %>% 
     dplyr::mutate(sum = sum(.[2:8])) 

Просто для справки, я попытался следующий набор кода, и они работают , Я специально ищу решение, которое использует rowwise() и sum().

Вариант 1: Обсуждаемые по адресу: Summarise over all columns

data %>% 
    dplyr::rowwise() %>% 
    do(data.frame(., res = sum(unlist(.)[2:8]))) 

Вариант 2:

rowSums(data[,2:8]) 

Вариант 3: Обсуждаемые по адресу: How to do rowwise summation over selected columns using column index with dplyr?

data %>% mutate(sum=Reduce("+",.[2:8])) 

Вариант 4:

data %>% 
     select(2:8)%>% 
     dplyr::mutate(sum=rowSums(.)) 
+0

Зачем вам нужен этот маршрут, он не эффективен по сравнению с некоторыми методами, упомянутыми в сообщении – akrun

+0

@akrun - Спасибо за ваш вопрос. «Эффективно», вы имеете в виду один из базового R? Как новичок, я считаю, что мне не хватает знаний о 'dplyr'. Следовательно, я хочу узнать, как исправить ошибки. Это просто поможет мне. – watchtower

+0

Два метода 'rowSums' и' Reduce' очень эффективны – akrun

ответ

2

Эти колонки выглядят подозрительно, как наблюдения ....
Если да, то, что приведение в порядок dataframe вверх бы данные пререканий значительно проще.

Получает ли вас ответы на ваши вопросы?

data %>% 
    gather(key = col, val = revenue, `col1`:`col7`) %>% 
    group_by(Fiscal.Year, No.Trans) %>% 
    summarise(res = sum(revenue)) 

Source: local data frame [10 x 3] 
Groups: Fiscal.Year [?] 

    Fiscal.Year No.Trans  res 
     <int> <int> <dbl> 
1   2016  366 9796823 
2   2016  381 20119455 
3   2016  388  0 
4   2016  400 32861493 
5   2016  677 18347259 
6   2016  691 34052101 
7   2016  796 12717074 
8   2016  1002 33251606 
9   2016  1292 44088865 
10  2016  2987 35822182 

Для действительно гладкого введения в мышлении опрятно, пожалуйста, попробуйте here. Функции, которые он обсуждает в презентации, были обновлены, но Хэдли делает отличную работу по обучению предмету: через педагогическую цепочку как бы.

Обновленные функции можно найти в его ggplot2 книга here.

Смежные вопросы