首页 > 解决方案 > 使用“dplyr”计算每一行数据帧的特定比率

问题描述

我知道这个话题并没有描述我想要做什么,但相信很难用一句话来解释。我有一个如下所示形式的数据框:

       ID V_tour
     <dbl>  <dbl>
 1 1206818      0
 2 1238530      0
 3 1238530      0
 4 1241498      0
 5 1228139      1
 6 1228139      1
 7 1334957      0
 8 1328103      1
 9 1206818      1
10 1334957      0
11 1239023      0
12 1241498      0
13 1152361      1

我想要做的是对于每个特定的 ID (这些 ID 可能重复超过 1 次),我想计算我们在“v_tour”列中有 1 的次数与其他的总行数的比率身份证件。说详细点,我们选择ID,1206818。对于这个ID,我得看其他ID,求那个数字1重复的次数占总数的比例。对于 ID 1206818,为 4/11,因为对于其他 ID,编号 1 在 v_tour 列中重复了 4 次,其他行的总数为 11,因此比率为 4/11。请注意,由于 ID 1206818 重复了两次,因此每次我们必须在该 ID 前面显示 4/11 所以预期的结果是:

       ID V_tour    ratio
     <dbl>  <dbl>
 1 1206818      0     4/11
 2 1238530      0     5/11
 3 1238530      0     5/11
 4 1241498      0     5/11
 5 1228139      1     3/11
 6 1228139      1     3/11
 7 1334957      0     5/11
 8 1328103      1     4/12
 9 1206818      1     4/11
10 1334957      0     5/11
11 1239023      0     5/12
12 1241498      0     5/11
13 1152361      1     4/12

标签: rdplyr

解决方案


我们可以计算数据中 1 的总数,然后用 1 的数量减去它,然后ID将这个数字除以(总行数 - 组中的行数)。

library(dplyr)

total_one <- sum(df$V_tour)
n <- nrow(df)

df %>%
  group_by(ID) %>%
  mutate(formula = paste(total_one - sum(V_tour), n-n(), sep = '/'),
         ratio = (total_one - sum(V_tour))/(n-n())) 

#        ID V_tour formula ratio
#     <int>  <int> <chr>   <dbl>
# 1 1206818      0 4/11    0.364
# 2 1238530      0 5/11    0.455
# 3 1238530      0 5/11    0.455
# 4 1241498      0 5/11    0.455
# 5 1228139      1 3/11    0.273
# 6 1228139      1 3/11    0.273
# 7 1334957      0 5/11    0.455
# 8 1328103      1 4/12    0.333
# 9 1206818      1 4/11    0.364
#10 1334957      0 5/11    0.455
#11 1239023      0 5/12    0.417
#12 1241498      0 5/11    0.455
#13 1152361      1 4/12    0.333

添加了一个附加formula列来解释如何ratio计算,您可以删除该列。


推荐阅读