首页 > 解决方案 > 语法 - 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 的语法有点陌生。

非常感谢...

标签: rdataframesyntax

解决方案


您可以使用applyorlapply并使您的功能在里面

apply(df[,13:30],2, function(x) x/mean(x))
lapply(df[,13:30], function(x) x/mean(x))

就像@Roland 说的那样,最好使用lapply循环 data.frame 列。


推荐阅读