我正在尝试执行求和功能以计算唯一ID的互动次数
所以我有这样的东西:
Client ID
JOE12_EMI
ABC12_CANC
ABC12_EMI
ABC12_RENE
以此类推...
它旁边还有一列,用于计算每个唯一ID重复多少次。
Frequency
1
2
2
1
有没有办法让我为每个ID汇总所有活动类型(EMI,TELI,PFL),然后将其放入新列?
我试图通过将实际ID与活动类型分开来转置数据,但这不会返回总和,谢谢您的帮助。我不确定这是最好的方法,还是将数据转换为宽格式,然后再执行另一个求和函数,但我不确定该怎么做。
separate(frequency, id, c("id", "act_code") )
nd <- melt(frequency, id=(c("id")))
答案 0 :(得分:0)
您处在正确的轨道上;我认为您唯一需要的就是group_by
。像这样:
library(dplyr)
library(tidyr)
df = data.frame(ClientID = c("JOE12_EMI",
"ABC12_CANC",
"ABC12_EMI",
"ABC12_RENE"))
df %>%
separate(ClientID, into = c("id", "act_code"), sep = "_") %>%
group_by(id) %>%
mutate(frequency = n()) %>%
ungroup() %>%
group_by(id, act_code) %>%
mutate(act_frequency = n()) %>%
ungroup() %>%
spread(act_code, act_frequency)
(这将按用户和活动类型分别进行总和;可以在用户进行数据透视后计算总和,但这种方式对我来说更容易阅读。)
答案 1 :(得分:0)
尝试一下:
library(dplyr)
data=data.frame(Client_ID= c("JOE12_EMI",
"ABC12_CANC",
"ABC12_EMI",
"ABC12_RENE"),
frequency= c(1,2,2,1))
client_and_id <- as.data.frame(do.call(rbind, strsplit(as.character(data$Client_ID), "_")))
names(client_and_id) <- c("client", "id")
data <- cbind(data, client_and_id)
data_sum <- data %>% group_by(id) %>% mutate(sum_freq = sum(frequency))
输出
> data_sum
# A tibble: 4 x 5
# Groups: id [3]
Client_ID frequency client id sum_freq
<fct> <dbl> <fct> <fct> <dbl>
1 JOE12_EMI 1 JOE12 EMI 3
2 ABC12_CANC 2 ABC12 CANC 2
3 ABC12_EMI 2 ABC12 EMI 3
4 ABC12_RENE 1 ABC12 RENE 1
您还可以按ID显示输出:
distinct(data_sum %>% dplyr::select(id, sum_freq))
# A tibble: 3 x 2
# Groups: id [3]
id sum_freq
<fct> <dbl>
1 EMI 3
2 CANC 2
3 RENE 1