我有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)
我有以下命令以便&#34;提取&#34;变量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 中没有更好的方法吗?
答案 0 :(得分:3)
使用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)]
答案 1 :(得分:1)
你可以创建一个无意义的方程函数,然后在(2^32)-1
中使用它,4294967295
作为INDEX参数,用于每个df。所以对于df1:tapply()
,它将返回一个列表/数组,其中包含df1的每个组(迭代)的所有计算。