如何在R中创建计算变量,其中我根据条件求和

时间:2018-04-30 03:01:26

标签: r dplyr

我有一个如下所示的数据框:

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

我需要这个,其中创建了一个新列querySum,它总结了特定查询的所有点击。因此,在上面的示例中,apple的行应始终显示为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 :(得分:1)

尝试以下方法:

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)