我想创建一个函数,将输出保存在列表中。我关心的是如何使用 dplyr group_by 和摘要指定哪一列。想象一个大数据集。请参阅下面的更多评论。
trt <- rep(LETTERS[1:3],3)
qw <- sample(100,9)
tr <- sample(100,9)
df <- data.frame(trt,qw,tr)
df %>%
group_by(trt) %>%
summarise(mean.mpg = mean(qw, na.rm = TRUE),
sd.mpg = sd(qw, na.rm = TRUE),
n.mpg = n())%>%
mutate(se.mpg = sd.mpg / sqrt(n.mpg),
lower.ci.mpg = mean.mpg - qt(1 - (0.05 / 2), n.mpg - 1) * se.mpg,
upper.ci.mpg = mean.mpg + qt(1 - (0.05 / 2), n.mpg - 1) * se.mpg)
为什么 n[i] 不起作用?应该如何指定它才能在函数中使用它?
n <- colnames(df)[2:3]
df %>%
group_by(trt) %>%
summarise(mean.mpg = mean(n[i], na.rm = TRUE),
sd.mpg = sd(n[i], na.rm = TRUE),
n.mpg = n())%>%
mutate(se.mpg = sd.mpg / sqrt(n.mpg),
lower.ci.mpg = mean.mpg - qt(1 - (0.05 / 2), n.mpg - 1) * se.mpg,
upper.ci.mpg = mean.mpg + qt(1 - (0.05 / 2), n.mpg - 1) * se.mpg)
最后我想进行这个循环并将输出保存在列表中
list_Data <- list()
for (i in 2:ncol(df)){
list_Data[[i]]<- df %>%
group_by(trt) %>%
summarise(mean.mpg = mean(n[i], na.rm = TRUE),
sd.mpg = sd(n[i], na.rm = TRUE),
n.mpg = n())%>%
mutate(se.mpg = sd.mpg / sqrt(n.mpg),
lower.ci.mpg = mean.mpg - qt(1 - (0.05 / 2), n.mpg - 1) * se.mpg,
upper.ci.mpg = mean.mpg + qt(1 - (0.05 / 2), n.mpg - 1) * se.mpg)
}
想要的输出:
[[1]]
# A tibble: 3 x 7
trt mean.mpg sd.mpg n.mpg se.mpg lower.ci.mpg upper.ci.mpg
<chr> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
1 A 35.7 32.9 3 19.0 -46.0 117.
2 B 46 37.2 3 21.5 -46.5 139.
3 C 64.3 47.8 3 27.6 -54.4 183.
[[2]]
# A tibble: 3 x 7
trt mean.mpg sd.mpg n.mpg se.mpg lower.ci.mpg upper.ci.mpg
<chr> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
1 A 57.7 40.5 3 23.4 -42.8 158.
2 B 49.3 31.0 3 17.9 -27.7 126.
3 C 32.7 34.8 3 20.1 -53.8 119.
最佳答案
一种选择是对 .data
代词建立索引,这可以在列名称存储为字符串时完成:
for (i in 1:length(n)){ # <-- Note the change from 2:ncol(df)
list_Data[[i]]<- df %>%
group_by(trt) %>%
summarise(mean.mpg = mean(.data[[n[i]]], na.rm = TRUE), # <-- .data pronoun here
sd.mpg = sd(.data[[n[i]]], na.rm = TRUE), # and here
n.mpg = n())%>%
mutate(se.mpg = sd.mpg / sqrt(n.mpg),
lower.ci.mpg = mean.mpg - qt(1 - (0.05 / 2), n.mpg - 1) * se.mpg,
upper.ci.mpg = mean.mpg + qt(1 - (0.05 / 2), n.mpg - 1) * se.mpg)
}
关于r - 使用 dplyr、group_by、summary 创建 for 循环,并将每个变量的输出保存在列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67181862/