r - purrr 迭代或循环所有列(类似于计算和求和或减去变量的函数)
问题描述
我想在这里找到一些见解来解决一个非常实际的问题。假设我有两个时间点(w0 和 w1),我想减去(或求和)所有特定的配对值。在时间 1 测量 1,在时间 2 测量 1,在时间 1 测量 2,在时间 2 测量 2。
我更熟悉 tidyverse 环境(需要 purrr),这就是我必须模拟真实数据集的代码
任何狩猎都需要。谢谢
library(tidyverse)
ds <- data.frame(w0_1=rnorm(10,1,2),
w0_2=rnorm(10,3,3),
w0_3=rnorm(10,3,2),
w1_1=rnorm(10,2,1),
w1_2=rnorm(10,3,3),
w1_3=rnorm(10,5,4))
ds %>%
summarise(dif_1 = mean(w0_1, na.rm=T)-mean(w1_1, na.rm=T))
ds %>%
summarise(dif_2 = mean(w0_2, na.rm=T)-mean(w1_2, na.rm=T))
顺便说一句,我知道下面的代码不起作用,但这就是我的问题背后的理由
for (i in 1:3) {
ds %>%
summarise(dif_1 = mean(w0_[[i]], na.rm=T)-mean(w1_[[i]], na.rm=T))
}
解决方案
使用@fmarm 的数据,这是一个不整洁的方法:
(ds.mean <- colMeans(ds, na.rm=TRUE))
# w0_1 w0_2 w0_3 w1_1 w1_2 w1_3
# 1.264 3.747 2.733 2.121 3.402 5.574
(ds.diff <- ds.mean[paste0("w0_", 1:3)] - ds.mean[paste0("w1_", 1:3)])
# w0_1 w0_2 w0_3
# -0.8563 0.3441 -2.8412
如果已知 w0 的数量(在本例中为 3),则更简单:
(ds.diff <- ds.mean[1:3] - ds.mean[4:6])
# w0_1 w0_2 w0_3
# -0.8563 0.3441 -2.8412
推荐阅读
- android - Dagger 模块依赖于另一个模块
- javascript - 如何使用 javascript 中的变量创建 for 循环?
- azure - 来自 .AddAzureADB2CBearer 的 Azure SignalR Hub 授权
- sql - 如何在 django 视图中设置分页?
- python - DRF:如何在序列化程序中不允许 create()
- java - 从 odesign Sirius 文件中导出图表/节点
- can-bus - CAN 中的填充位是否计入下一个填充组
- android - FocusMeteringAction 似乎无法在最新版本的 CameraX 上正常工作
- android - Instagram 喜欢 Video & Image ViewPager
- python - 将两个字典合二为一,dict2 中的元素优先