【问题标题】:scale values within group in R [duplicate]R中组内的比例值[重复]
【发布时间】:2020-04-21 05:48:58
【问题描述】:
df <- data.frame(x=c(1,1,2,2,3,3,3),y=c(1,3,4,3,5,2,3))

我想为x 的每个元素创建一个缩放值为y 的列 所以当x==1 --> scale(c(1,3))x==2 --> scale(4,3)等时

这就是我想要实现的目标

x  y  y2
1  1  -0.7071
1  3   0.7071
2  4   0.7071
2  3  -0.7071
3  5  -0.2182
3  2   1.0910
3  3  -0.8728

【问题讨论】:

标签: r


【解决方案1】:

您可以按组应用scale函数:

这可以在基础 R 中完成:

df$y2 <- with(df, ave(y, x, FUN = scale))
df

#  x y        y2
#1 1 1 -0.707107
#2 1 3  0.707107
#3 2 4  0.707107
#4 2 3 -0.707107
#5 3 5  1.091089
#6 3 2 -0.872872
#7 3 3 -0.218218

dplyr

library(dplyr)
df %>% group_by(x) %>% mutate(y2 = scale(y))

data.table

library(data.table)
setDT(df)[, y2 := scale(y), x]

数据

df <- data.frame(x=c(1,1,2,2,3,3,3),y=c(1,3,4,3,5,2,3))

【讨论】:

  • dplyr 方法不正确。
  • @Neel 我在所有 3 种方法中得到相同的输出。如果您使用的是 OP 的数据,请注意 OP 在其数据中有 6 行,而在预期输出中它们显示了 7 行。用我使用的数据更新了帖子。
  • 该死的,当我使用 OP 的数据时,结果不匹配。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-20
  • 1970-01-01
  • 2017-03-30
  • 1970-01-01
  • 2016-08-31
  • 2022-01-08
相关资源
最近更新 更多