r语言 - 如何转置唯一 ID 的字符数据



>我试图执行一个求和函数来计算唯一 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)

(这分别按用户和按活动类型进行透视;可以在透视后按用户计算总和,但这种方式对我来说更容易阅读。

最新更新