r - 根据组缩放所有值

标签 r scale tapply

这个问题在这里已经有了答案:





scale/normalize columns by group

(2 个回答)


4年前关闭。




我有一个类似于这个的数据框

ID <- c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3)
p1 <- c(21000, 23400, 26800, 2345, 23464, 34563, 456433, 56543, 34543,3524, 353, 3432, 4542, 6343, 4534 )
p2 <- c(234235, 2342342, 32, 23432, 23423, 2342342, 34, 2343, 23434, 23434, 34, 234, 2343, 34, 5)
my.df <- data.frame(ID, p1, p2)

现在我想根据它们的 ID 缩放 p1 和 p2 中的值。因此,不会像使用 tapply() 函数那样缩放整列,而是对 ID 1 的所有值进行一次缩放,然后对 ID 2 的所有值进行缩放,等等。 p2 的缩放也是如此。新数据框应包含缩放值。

我已经试过了
df_scaled <- ddply(my.df, my.df$ID, scale(my.df$p1))

但得到错误信息
.fun is not a function.

谢谢你的帮助!

最佳答案

dplyr 使这变得容易:

ID <- c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3)
p1 <- c(21000, 23400, 26800, 2345, 23464, 34563, 456433, 56543, 34543,3524, 353, 3432, 4542, 6343, 4534 )
p2 <- c(234235, 2342342, 32, 23432, 23423, 2342342, 34, 2343, 23434, 23434, 34, 234, 2343, 34, 5)
my.df <- data.frame(ID, p1, p2)

library(dplyr)
df_scaled <- my.df %>% group_by(ID) %>% mutate(p1 = scale(p1), p2=scale(p2))

请注意,在使用 scale 时,dplyr 的稳定版本中存在一个错误;您可能需要更新到开发版本(请参阅评论)。

关于r - 根据组缩放所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41761018/

相关文章:

r - 单个 tapply 或聚合语句中的多个函数

r - 数据框中分组数据中每个观察值的标准误差

javascript - 尝试在 Firefox 中将 div 设置为自动

ios - 关于如何在不损失图像质量的情况下缩放全屏 iPad 图像的任何建议?

R:评估一个字符串

r - 如何一次替换多个值

algorithm - 如何改变矢量的比例?

R : Percentile 90% with tapply

R auto.arima "No ARIMA model able to be estimated"

减少 R 中 ggplot 的主轴和 CI