如何在 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 的每个组(迭代)进行所有计算。
我有 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 的每个组(迭代)进行所有计算。