[英]Tidyverse function
我是 R 的新手(ish),需要您的帮助。 我有一个包含 5 个响应变量处理级别的数据集。 假设,我在土壤含水量的 5 个水平(最佳、40%、30%、20% 和 10%)下测量了土壤 N 含量。 对于每个级别,我有 5 个重复。 现在,我想计算非标准化(最优 - 40%,最优 -30%,最优 - 20%,最优 - 10%)和标准化(最优 - 40% / 最优,最优 - 30% / 最优,等等)对于每个重复。 有没有办法在 R 中使用 tidyverse 做到这一点? 我对制作“循环”功能仍然很陌生。 如果有人可以用潜在的代码回答,这将是一个很大的帮助。
(正如我在上面的评论中所指出的,如果您可以共享示例数据、当前代码和您的期望,那么在此论坛上回答您的问题会更容易。然后潜在的回答者可以更有信心他们实际上正在回答您的问题,而不是. 你所质疑的版本听起来像。)
下面是使用dplyr,在这里我们首先计算装置使用每级/治疗的方法group_by
+ summarize
。 请注意,分组有两个维度( treated
+ levels
),并总结“剥离”要应用的最后一个维度(在本例中为levels
)。 因此,在summarize
行之后,数据仍按treated
分组。 我们可以使用方括号[]
符号来指定用于标准化的级别。 在这种情况下,我将每个值除以其各自treated
组内的“最佳”值。
library(dplyr)
df %>%
group_by(treated, levels) %>%
summarize(avg_raw = mean(values)) %>%
mutate(avg_standarized = avg_raw / avg_raw[levels == "optimal"]) %>%
ungroup()
输出
# A tibble: 10 x 4
treated levels avg_raw avg_standarized
<lgl> <chr> <dbl> <dbl>
1 FALSE 10% 0.628 1.16
2 FALSE 20% 0.502 0.927
3 FALSE 30% 0.370 0.684
4 FALSE 40% 0.606 1.12
5 FALSE optimal 0.541 1
6 TRUE 10% 0.608 1.55
7 TRUE 20% 0.371 0.945
8 TRUE 30% 0.499 1.27
9 TRUE 40% 0.629 1.60
10 TRUE optimal 0.393 1
样本数据
df <- data.frame(stringsAsFactors = FALSE,
levels = rep(c("optimal", "40%", "30%", "20%", "10%"), 4),
treated = rep(c(TRUE, FALSE), each = 10),
values = (sin(1:20)^2))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.