计算R中的响应率

计算R中的响应率,r,R,我在R中有一个数据表,例如: id列是唯一的customerid。我想做的是通过分段系数计算响应率列 如何执行诸如count(unique paymentid)/count(unique id)在paymentid中包含NAs之类的功能 我希望生成的表如下所示: 非常感谢 有几种方法可以做到这一点。下面是一种使用by的方法,以及一种使用dplyr的方法: d <- data.frame(segment=c('Y', 'Y', 'R', 'R', 'B', 'B', 'B'),

我在R中有一个数据表,例如:

id列是唯一的customerid。我想做的是通过分段系数计算响应率列

如何执行诸如
count(unique paymentid)/count(unique id)
在paymentid中包含NAs之类的功能

我希望生成的表如下所示:


非常感谢

有几种方法可以做到这一点。下面是一种使用
by
的方法,以及一种使用
dplyr
的方法:

d <- data.frame(segment=c('Y', 'Y', 'R', 'R', 'B', 'B', 'B'),
                paymentamount=c(10, NA, 20, 15, 12, 13, NA))

也许有一种更优雅的方法可以做到这一点,但这里有一个选项(稍微过时的版本)
数据

library(data.table)
library(scales)
##
setDT(Df)
##
Df2 <- Df[
  ,list(
    NumberSent=.N,
   NumberResponded=length(
     unique(na.omit(paymentid)))),
  by=segment][,ResponseRate:=percent(
    NumberResponded/NumberSent)]
##
R> Df2
   segment NumberSent NumberResponded ResponseRate
1:       Y          2               1        50.0%
2:       R          2               2       100.0%
3:       B          3               2        66.7%
这里我用的是dplyr

d <- data.frame(segment=c('Y', 'Y', 'R', 'R', 'B', 'B', 'B'), paymentamount=c(10, NA, 20, 15, 12, 13, NA))

require(dplyr)

x <- d %>%
  group_by(segment) %>%
  summarize(NumberSent = n(), NumberResponded = sum(!is.na(paymentamount)), 
    ResponseRate = paste(round(100*(NumberResponded/NumberSent),0),"%", sep="") ) %>%
  arrange(desc(segment))
d%
汇总(NumberSent=n(),numberrespond=sum(!is.na(paymentamount)),
响应率=粘贴(四舍五入(100*(NumberResponsed/NumberSent),0),“%”,sep=“”)%>%
排列(描述(段))
library(data.table)
library(scales)
##
setDT(Df)
##
Df2 <- Df[
  ,list(
    NumberSent=.N,
   NumberResponded=length(
     unique(na.omit(paymentid)))),
  by=segment][,ResponseRate:=percent(
    NumberResponded/NumberSent)]
##
R> Df2
   segment NumberSent NumberResponded ResponseRate
1:       Y          2               1        50.0%
2:       R          2               2       100.0%
3:       B          3               2        66.7%
Df <- data.frame(
  id=1:7,
  segment=rep(c("Y","R","B"),c(2,2,3)),
  paymentamount=c(10,NA,20,15,12,13,NA),
  paymentid=c(11,NA,12,13,14,15,NA))
d <- data.frame(segment=c('Y', 'Y', 'R', 'R', 'B', 'B', 'B'), paymentamount=c(10, NA, 20, 15, 12, 13, NA))

require(dplyr)

x <- d %>%
  group_by(segment) %>%
  summarize(NumberSent = n(), NumberResponded = sum(!is.na(paymentamount)), 
    ResponseRate = paste(round(100*(NumberResponded/NumberSent),0),"%", sep="") ) %>%
  arrange(desc(segment))