Как создать вычисляемую переменную в R, где я суммирую на основе критериев - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть фрейм данных, который выглядит следующим образом:

query        page           clicks
apples       /apples        50
oranges      /oranges       25
apples       /bad-apples    40
bananas      /bananas       25
apples       /all-fruits    10

Мне нужно это, когда создается новый столбец querySum, который суммирует все клики для определенного запроса. Так, в приведенном выше примере строка для яблок всегда должна показывать 100 (50 + 40 + 10).

query        page           clicks   querySum
apples       /apples        50       100
oranges      /oranges       25       25
apples       /bad-apples    40       100
bananas      /bananas       25       25
apples       /all-fruits    10       100

Я попробовал dplyr, но он создал таблицу меньшего размера только с уникальными значениями. Есть ли способ применить это к каждой строке в новом столбце, возможно, используя цикл?

df$querySum <- df %>% group_by(query) %>% summarise(querySum = sum(clicks))

1 Ответ

0 голосов
/ 30 апреля 2018

Попробуйте следующее:

library(tidyverse);
df %>% group_by(query) %>% mutate(querySum = sum(clicks))
## A tibble: 5 x 4
## Groups:   query [3]
#  query   page        clicks querySum
#  <fct>   <fct>        <int>    <int>
#1 apples  /apples         50      100
#2 oranges /oranges        25       25
#3 apples  /bad-apples     40      100
#4 bananas /bananas        25       25
#5 apples  /all-fruits     10      100

Или в базе R вы можете использовать ave:

df$querySum = ave(df$clicks, list(df$query), FUN = sum);
df;
#    query        page clicks querySum
#1  apples     /apples     50      100
#2 oranges    /oranges     25       25
#3  apples /bad-apples     40      100
#4 bananas    /bananas     25       25
#5  apples /all-fruits     10      100    

Пример данных

df <- read.table(text =
    "query        page           clicks
apples       /apples        50
oranges      /oranges       25
apples       /bad-apples    40
bananas      /bananas       25
apples       /all-fruits    10", header = T)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...