如何通过连接到另一个数据表中的列来查找百分比值



我已经建立了一个数据。

State Bounced Opened Delivered
FL    2       1      0
NY    0       1      1

和我有另一个数据。表dt2的总价值:

State Total
NY    2
FL    3   

我想找到第一个数据表中每列的频率百分比:

State Bounced Opened Delivered
FL    66.66   33.33  0
NY    0       50     50

如果我简单地* 100并将所有第一个数据表除以第二个数据表的Total列,我得到了结果,但是第一个包含州名的列变成了NA,这是不好的。

如果我喜欢:

dt1[, percen:=Bounced/dt2$Total]

可以工作,但是我必须对所有列重复这个过程。是否有一种方法可以复制到除第一列以外的所有列?

第二个问题:检查使用的Total值是否正确(即属于正确的状态)的最佳方法是什么?到目前为止,我所做的只是按字母顺序排列State列,但我想知道数据是否。

这是一个连接操作,所以使用data。表连接语法,这是一行代码:

dt1 <- data.table(State=c('FL','NY'), Bounced=c(2,0),
                  Opened=c(1,1), Delivered=c(0,1), key='State')
dt2 <- data.table(State=c('NY','FL'), Total=c(2,3), key='State')
colsToDivide = c('Bounced','Opened','Delivered')
dt1[dt2, (colsToDivide) :=
  lapply(mget(colsToDivide), function(x) {100*x/Total} ) ]
#   State  Bounced   Opened Delivered
#1:    FL 66.66667 33.33333         0
#2:    NY  0.00000 50.00000        50

我不是很好与data.table,但是,我认为这将工作。

cbind(State = df1$State, 
      df1[, -1, with = FALSE]/df2$Total[match(df1$State, df2$State)]* 100)
#   State  Bounced   Opened  Delivered
#1:    FL  66.667    33.333         0
#2:    NY  0.000     50.000        50

考虑df1df2data.table

这也会回答你的第二个问题,因为matchdf1中的Statedt10的CC_8。

最新更新