r - 使用“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
解决方案
我们可以计算数据中 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
计算,您可以删除该列。
推荐阅读
- javascript - 如何在不点击链接的情况下直接进入地图(点击“显示我的位置”按钮后直接进入地图)?
- gradle - jar后Gradle没有运行复制任务
- html5-canvas - 使用 createJS 和 Canvas 拖动以调整位图大小
- java - 在字段的部分匹配上将地图与另一个地图合并的有效方法
- c# - 不想使用 HtmlAgilityPack 从空 html 节点中删除锚空标记?
- authentication - 使用 Identity Server4 实施问题的 nopCommerce 身份验证
- javascript - 如何在 Loopback 模型的帮助下使用 strapi 获取数据?
- kotlin - 为什么 Kotlin 的 generateSequence 在下面的示例中返回一个太多的项目?
- python - 在 keras 上使用 ImageDataGenerator 中的 preprocessing_function
- python - Python smtplib - 重复的电子邮件