>我试图执行一个求和函数来计算唯一 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")))
试试这个:
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
你走在正确的轨道上;我认为你唯一需要的就是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)
(这分别按用户和按活动类型进行透视;可以在透视后按用户计算总和,但这种方式对我来说更容易阅读。