循环函数并将列添加到 R 中的数据帧

use*_*480 5 loops r function mean sapply

我想在数据帧上循环一个函数,并将函数中的信息添加到数据帧中。我已经阅读了许多有关循环和将函数应用于数据帧的相关文章,这些文章让我接近了我所需要的,但还不够,所以我希望人们可以帮助我。

我有许多看起来像这样的数据框

dat1=as.data.frame(matrix(rnorm(25),ncol=5))
dat2=as.data.frame(matrix(rnorm(25),ncol=5))
dat3=as.data.frame(matrix(rnorm(25),ncol=5))
Run Code Online (Sandbox Code Playgroud)

我想计算其中一些列的平均值并添加到数据框的末尾。因此,我编写了一个函数来计算数据帧的平均值:

my_fun <-  function(dataframe){
rowMeans( dataframe[ , c("V1","V2")],na.rm=TRUE) 
}
Run Code Online (Sandbox Code Playgroud)

要将此函数应用于一个数据帧,我这样做:

 dat1$V6<- my_fun(dat1)
Run Code Online (Sandbox Code Playgroud)

但我希望能够循环所有数据帧并将此平均列添加到每个 df 的末尾。

阅读了一些有用的帖子后,我创建了一个列表并使用了 sapply:

dfList<-list(dat1,dat2,dat3)#create list
sapply(dfList, my_fun) #apply function to list
Run Code Online (Sandbox Code Playgroud)

这给了我想要的值,但我不希望它们在单独的输出中 - 我希望它们简单地在原始数据帧上添加一列 - 就像我将函数应用于各个数据帧时发生的那样。谁能告诉我该怎么做?或者向我指出一篇描述如何执行此操作的帖子(我已经进行了高低搜索,但可能输入了错误的关键字),如果您知道如何操作,我确信它非常简单!

akr*_*run 1

尝试这个:

只是为了消除混乱。

dat1=as.data.frame(matrix(rnorm(25),ncol=5))
dat5=as.data.frame(matrix(rnorm(25),ncol=5))
dat7=as.data.frame(matrix(rnorm(25),ncol=5))

my_fun <-  function(dataframe){
rowMeans( dataframe[ , c("V1","V2")],na.rm=TRUE) 
}

dfList<-list(dat1,dat5,dat7)

Vars <- grep("dat", ls(), value=TRUE)
Vars
 #[1] "dat1" "dat5" "dat7"

res <- lapply(dfList, function(x) transform(x,V6=my_fun(x)))
for(i in 1:length(Vars)){
assign(Vars[i], res[[i]],envir=.GlobalEnv)
}
Run Code Online (Sandbox Code Playgroud)

第二个函数:

my_funSD <-  function(dataframe){
apply( dataframe[ , c("V1","V2")],1,sd) 
}

dfList<-list(dat1,dat5,dat7)
res1 <- lapply(dfList, function(x) transform(x,V7=my_funSD(x)))
ncol(dat1)
 #[1] 6

for(i in 1:length(Vars)){
assign(Vars[i], res1[[i]],envir=.GlobalEnv)
}
ncol(dat1)
#[1] 7
colnames(dat1)
[1] "V1" "V2" "V3" "V4" "V5" "V6" "V7"
Run Code Online (Sandbox Code Playgroud)