r - 语法 - R 数据帧
问题描述
我有一个数据框 df。
30 列,约 1.5m 行。
我想通过将这些列中的每个数字除以该列的平均值来“标准化”第 13 到 30 列。我可以做这个:
df_norm[, 13] <- df[, 13] / Column_Means[1]
df_norm[, 14] <- df[, 14] / Column_Means[2]
df_norm[, 15] <- df[, 15] / Column_Means[3]
...etc...etc...etc..
df_norm[, 29] <- df[, 29] / Column_Means[17]
df_norm[, 30] <- df[, 30] / Column_Means[18]
它可以工作,但它很笨拙而且有点慢。我曾希望在一行中完成所有操作,可能类似于:
df_norm[, 13:30] <- df[, 13:30] / Column_Means
或者
df_norm[, 13:30] <- df[, 13:30] / Column_Means[1:18]
但这似乎不起作用 - 它总是除以 Column_Means[1] 而不是遍历所有 18 个值。
请有人告诉我是否有一行代码可以满足我的需求?如果可以的话,我喜欢编写简洁的代码,但我对 R 的语法有点陌生。
非常感谢...
解决方案
您可以使用apply
orlapply
并使您的功能在里面
apply(df[,13:30],2, function(x) x/mean(x))
lapply(df[,13:30], function(x) x/mean(x))
就像@Roland 说的那样,最好使用lapply
循环 data.frame 列。
推荐阅读
- html - 如何使用 rel=preload 预加载素材图标?
- grails - grails 3运行命令不起作用
- sql-server - 在 SQL Server 中将时间格式从 3.5 转换为 3:30
- java - 在 Lucene 中索引多级 JSON 对象
- python - 了解父级属性设置器的继承
- c++ - Eigen + MKL 对于矩阵乘法比 Matlab 慢
- wordpress - 标题未显示在前端 - 古腾堡
- javascript - 为对象中的所有成员调用 setTimeout() - 从不调用第一个成员,并调用第二个成员。为什么?
- google-chrome - 使用 Google 脚本自动化 Chrome?
- python - 在python中编写库时如何处理异常