向量化此R循环和自定义函数

亚历克斯

data.frame在命名列中有一个分数,我需要根据rowMeans定义colNames需要分组的索引文件获取某些列簇我想同时执行此操作,因为当前它是在循环中完成的,该循环传递当前的“群集”以进行处理。见下文。

我有两个数据帧,一个是带有以下内容的索引文件(还有更多,例如,这是obv)

set.seed(42)
index <- data.frame(area=c("area1","area1","area1","area2","area2","area2","area1",
    "area1","area4","area5"), name=c(paste0("name",sample(6,10,replace=T))))

另一个是数据文件,这里又是一个贫困的例子

data <- data.frame(name1=sample(10,5),name2=sample(10,5),name3=sample(10,5),
       name4=sample(10,5),name5=sample(10,5),name6=sample(10,5))

我做了一个函数,rowMeans根据“索引” df返回组成区域的“数据” df的列

myfun <- function (curr.target) {
       target.cols <- as.character(index$name[index$area==curr.target])
        return(rowMeans(data[target.cols],na.rm=T))
    }

然后,我使用该函数通过遍历区域来获取区域的行均值。

for (i in seq_along(unique(index$area))){
  data[,as.character(unique(index$area))[i]] <- myfun(as.character(unique(index$area))[i])
}

我在跳动自己,想一想如何做到这一点(一旦编写了函数),但是根本无法动弹。有什么建议么?

阿克伦

我们可以split按“区域”按“索引”中的“名称”列,然后遍历list,根据“索引”中“名称”列的子集“数据”并获取rowMeans

sapply(split(as.character(index$name), index$area), function(x) rowMeans(data[x]))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章