r - 计算 R 中两个变量的平均比率的最佳方法是什么?
问题描述
假设我想找到数据集中两个变量的比率(然后最终根据数据集中的第三个变量找到比率的聚合平均值)。解决此问题的最佳方法是什么?目前,我正在尝试使用一个同时存在 NA 和零值的大型数据集,并且我尝试的所有内容最终都输出 Infinity(我假设是因为存在零)。
解决方案
欢迎来到 Stackoverflow。请添加您正在使用的数据或使您的问题/问题可在下次问题中重现的数据。这样我们可以提供更具体的帮助。当我正确理解时,您的数据如下所示:
df <- tibble::tribble(
~V1, ~V2, ~V3,
1L, 3L, "a",
3L, 4L, "a",
2L, 0L, "b",
54L, 0L, "b",
6L, 8L, "a",
3L, 5L, "c",
3L, NA, "c"
)
df
# A tibble: 7 x 3
V1 V2 V3
<int> <int> <chr>
1 1 3 a
2 3 4 a
3 2 0 b
4 54 0 b
5 6 8 a
6 3 5 c
7 3 NA c
并且想要计算两个变量(此处为 V1 和 V2)之间的比率,然后计算由另一个变量(V3)分组的平均比率。一种方法是:
df %>%
mutate(ratio = V1 / na_if(V2, 0)) %>%
group_by(V3) %>%
summarise(mean = mean(ratio, na.rm = TRUE))
# A tibble: 3 x 2
V3 mean_ratio
<chr> <dbl>
1 a 0.611
2 b NaN
3 c 0.6
na_if()
通过用 NA 替换零来处理除以 0 的问题。
根据评论编辑:
如果 V1 和 V2 都有要排除的 NA 值,mutate 函数会是什么样子?我以为你想排除 0?na_if()
如上所述,将 0 替换为 NA 以防止被零除。NA 被排除在mean
函数中,因为是 set na.rm = TRUE
。您可以na_if(V1, 0)
在 V1 中用 NA 替换 0,但为什么要这样做呢?
这是一种使用基础 R 的方法:
df$ratio <- df$V1 / ifelse(df$V2 == 0, NA, df$V2)
aggregate(df$ratio, list(group = df$V3), FUN = function(x) mean(x, na.rm = TRUE))
请确保您在将它们作为作业提交之前了解这些函数在做什么:) 如果您不了解某个函数在做什么,请键入?function_name
(例如,?aggregate
)阅读文档。
推荐阅读
- xero-api - 如何获取到我的 Xero 应用程序的连接计数?
- react-native - ABD 设备:未找到
- bash - *** 使用 cut-command 时更改为文件
- react-native - React Native - AWS Amplify 无法在发布模式下登录 android
- java - WebDriverManager 在 selenium 中采用不正确的驱动程序版本
- c# - 使用 exceldatareader 将 excel 工作表行 ID 获取到数据集中
- python - 如何检查线程(来自一堆线程)是否抛出异常?
- excel - VBA – 为什么将工作簿和工作表保存到变量中
- ipywidgets - 无法安装 ipywidgets jupyter 实验室扩展
- python - 将散点图分成块并计算均值