我有一个如下所示的数据框:
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))
答案 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)