首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >r:以编程方式规范化和命名变量

r:以编程方式规范化和命名变量
EN

Stack Overflow用户
提问于 2018-12-13 06:39:13
回答 1查看 97关注 0票数 0

我有一个包含两个变量的数据集:

代码语言:javascript
复制
df<- data.frame(var1= rnorm(20, 15, 1.5), var2= rnorm(20, 7.5, 1))

我有一个函数可以用来对它们进行规范化:

代码语言:javascript
复制
normFunc<- function(x){
  xAvg<- mean(x)
  return(x/xAvg)
}

手动运行该函数运行良好,请参阅var1上的以下内容

代码语言:javascript
复制
df$var1AVG<- normFunc(df$var1)

我想做的是将这两个变量动态地传递给函数,使用for循环,将它们赋值给数据帧,并动态命名它们。

EN

回答 1

Stack Overflow用户

发布于 2018-12-13 06:47:26

您可以使用colMeans/colMeans2以矢量化的方式完成此操作

代码语言:javascript
复制
df / colMeans(df)
# or
df / matrixStats::colMeans2(as.matrix(df))
# yields
     var1      var2
1  0.9307705 0.4228236
2  1.9674104 0.9776180
3  1.1397295 0.4255726
4  2.0279614 0.9090271
5  0.9987836 0.4519303
...

有了数据

代码语言:javascript
复制
set.seed(123)
df <- data.frame(var1= rnorm(20, 15, 1.5), var2= rnorm(20, 7.5, 1))

附录

要回答您的问题:

或者,在这种情况下,Vectorize方法或apply系列( vapply是目前为止最有效的)值得一试--在您的情况下,vapply(1:ncol(df), function (n) normFunc(df[,n]), numeric(nrow(df)))可以工作。或者,一个构造良好的循环有时甚至可以更快。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53752461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档