如何在 R 中提取 105 个变量进行计算

How to extract 105 variables for calculation in R

我有 7 个实验数据帧,每个数据帧又细分为 15 次重复(或迭代)。我现在对所有 105 变量 x 感兴趣,以便稍后在分析中进行计算。

假设您有以下带有随机数字的数据帧,为了简单起见,假设所有数据帧都包含不同的数字:

set.seed(2)

a <- runif(100, -1.5, 1.5)
b <- pnorm(rnorm(100))
c <- rnorm(100)
d <- rnorm(100)
e <- dnorm(rnorm(100))
iteration <- sort(sample(1:7, 100, replace=T), decreasing=F)
x <- f <- sample(1:1000, 100, replace=T)

df1 <- data.frame(a,b,c,d,e,iteration,x)
df2 <- data.frame(a,b,c,d,e,iteration,x)
df3 <- data.frame(a,b,c,d,e,iteration,x)
df4 <- data.frame(a,b,c,d,e,iteration,x)
df5 <- data.frame(a,b,c,d,e,iteration,x)
df6 <- data.frame(a,b,c,d,e,iteration,x)
df7 <- data.frame(a,b,c,d,e,iteration,x)

如何分解所有 105 个变量 x 组合 (df1$x of iteration 1, df1$x of iteration 2, ..., df7$x of iteration 7) 以便我可以计算以下示例所有 105 个变量组合的无意义方程?

mean(df1$x of iteration 1) - sd(df1$x of iteration 1)
mean(df1$x of iteration 2) - sd(df1$x of iteration 2)
...
mean(df7$x of iteration 7) - sd(df7$x of iteration 7)

我有以下命令来 "extract" 变量 df1$x of iteration 1 但这将涉及 208 行以上的剩余变量:

df_1 <- df1[which(df1$iteration=='1'),]
df_1_final <- df_1[grepl("1", df_1$iteration), c(6, 7)]

这有意义吗?在 Gnu R 中没有更好的方法吗?

使用 dplyr 的可能性。在列表中使用 data.frames 可能更容易(来自@akrun 的评论)

library(dplyr)

bind_rows(mget(paste0('df', 1:7))) %>%  # put your data.frames in a list -> data.frame
  mutate(group=rep(1:7, each=100)) %>%  # add a grouping column
  group_by(group, iteration) %>%        # group
  summarise(mean(x) - sd(x))            # do your stuff

或在data.table

rbindlist(mget(paste0('df', 1:7)))[,mean(x)-sd(x) ,.(gr=rep(1:7,each=100),iteration)]

您可以创建一个无意义的方程函数,然后在 tapply() 中使用它,并将 iteration 作为 INDEX 参数,用于每个 df。因此对于 df1: tapply(df1$x, INDEX = df1$iteration, nonsenseFunction),这将 return a list/array 对 df1 的每个组(迭代)进行所有计算。