for循环和一个函数结合起来计算公式然后回归

时间:2017-12-01 14:35:28

标签: r function loops

与我试图实现我想要的结果有点混淆。

我在R中有一个环境,它包含5个名为df[i]

的data.frames

因此;

df1
df2
df3
df4
df5

在这些df´s内,我有5列名为col[j]

col1
col2
col3
col4
col5

总共我有5个数据帧(5 df x 5 col)的25列。

我还有一个名为R的静态变量,它是一个数字向量

我试图使用函数/循环计算每个数据帧的每一列的基本公式。 df1第1列的公式为;

Y = df1$col1 - R

我正在尝试计算这一点并重复colum[j:5]中的每个df[i:5]并将其存储在新的data.frame

j <- 1:5
i <- 1:5
fun <- function(x){
  for(i in 1:col[j](df[i])){
    Y[j] <- col[j] - R
  }
}

编辑:在下方添加了评论,以便于阅读。

Y1a = df1$col1 - R
Y2a = df1$col2 - R
Y3a = df1$col3 - R  
..... 

.....
 Y1b = df2$col1 - R 
 Y2b = df2$col2 - R 
 Y3b = df2$col3 - R
..... etc

2 个答案:

答案 0 :(得分:3)

# Put your data in a list:    
dflist = mget(paste0("df", 1:5))

# Apply your function to every data frame
ylist = lapply(dflist, function(x) x - R)

# Name the resulting columns y1:y5
ylist = lapply(ylist, setNames, paste0("y", 1:5))

查看How to make a list of data frames的示例,并讨论为什么使用列表更好。

答案 1 :(得分:1)

tidyverse版

dplyr::mutate_all将一个函数应用于data.frame的每一列。

所以我会这样做:

all_df <- list(df1, df2, df3, df4, df5) 
map(all_df, function(x) mutate_all(x, function(y) y - R))    

它应该返回一个长度为5的列表。每个df包含您想要的统计数据。