r - 循环功能并将列添加到 R 中的数据框

标签 r function loops 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))

我想计算其中一些列的平均值并添加到数据框的末尾。因此,我编写了一个函数来计算数据帧的均值:
my_fun <-  function(dataframe){
rowMeans( dataframe[ , c("V1","V2")],na.rm=TRUE) 
}

要将这个函数应用于一个数据帧,我这样做:
 dat1$V6<- my_fun(dat1)

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

在阅读了一些有用的帖子后,我创建了一个列表并使用了 sapply:
dfList<-list(dat1,dat2,dat3)#create list
sapply(dfList, my_fun) #apply function to list

这给了我想要的值,但我不希望它们在单独的输出中 - 我希望他们简单地在原始数据帧上添加一列 - 当我将函数应用于单个数据帧时会发生这种情况。谁能告诉我如何做到这一点?或者将我指向描述如何执行此操作的帖子(我搜索了高低,但可能输入了错误的关键字)如果您知道如何操作,我相信它非常简单!

最佳答案

如果您使用 data.table,它会更容易并且至少快 100 倍

require(data.table)
set.seed(612)
dat1=as.data.table(matrix(rnorm(25),ncol=5))
dat2=as.data.table(matrix(rnorm(25),ncol=5))
dat3=as.data.table(matrix(rnorm(25),ncol=5))

dtList <- list(dat1, dat2, dat3)

for (dat in dtList) {
     dat[,V6:=(V1 + V2)/2]
}

这给出了以下输出:
> dtList

[[1]]
           V1         V2         V3         V4          V5          V6
1:  0.3903228 -1.1581608  1.0171311  0.3866628  0.02756137 -0.38391897
2: -0.6030124  0.4713771 -2.4204376 -0.2843527  0.53463600 -0.06581764
3: -0.9850333  0.3343518 -1.2329712 -1.1767533  0.56714483 -0.32534080
4: -0.1591335 -0.6729444  0.5062648 -0.3001857 -0.84896068 -0.41603897
5:  1.7127203  0.3149884  1.7633945  1.7824786 -0.90316850  1.01385434

[[2]]
            V1         V2         V3          V4         V5         V6
1: -1.22790810  0.8429506  0.4921844 -0.29686607 -0.9501956 -0.1924788
2:  0.09405923 -1.6970403  0.1280003  1.22284944  0.8667643 -0.8014905
3:  0.55298783 -0.1081849  0.4120268 -0.56411756  1.9135802  0.2224015
4: -0.82621808  0.4753731  0.4755664 -0.05885804  0.9658787 -0.1754225
5:  0.44262554  0.3036363 -1.7404580  0.88870595  1.4826431  0.3731309

[[3]]
            V1          V2         V3        V4          V5          V6
1:  0.82085834  0.07221027  1.8835042 0.2563714  0.27891033  0.44653430
2:  0.00445113  1.89450534  0.3878858 1.8385587 -1.86381524  0.94947824
3:  0.66458950 -1.31023362 -0.9403257 1.2128128  0.74922668 -0.32282206
4: -1.40169143 -1.52925147  0.8232823 0.3391147  0.33463875 -1.46547145
5:  1.10566340 -1.16512217  0.3859652 0.8123110  0.04712086 -0.02972939

关于r - 循环功能并将列添加到 R 中的数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24183083/

相关文章:

r - 如何将年份转换为 %Y%m%d %H :%M:%S?

python - rpy2 的 R_HOME 错误

java - 在 Java 中使用 lambda 作为类的方法

c++ - 为什么用作数组大小的函数的常量参数会出错?

python - 将具有一个共同元素的列表列表组合在一起并保存到单独的文本文件中(python)

具有动态变量名称的 r dplyr 过滤器

r - 改变 ddply 的输出

c++ - 创建和调用函数

java - for 循环中 if 语句中的 return 语句之后会发生什么

jquery - 在固定的 div 内无限滚动内容循环