gpt4 book ai didi

r - 根据不同的数据集改变新列

转载 作者:行者123 更新时间:2023-12-05 08:37:52 24 4
gpt4 key购买 nike

示例我有三个数据集:df1_mean(基于 df1 的每个变量的平均值)、df1_sd(基于 df1 的每个变量的 sd)和 df2(df2 的值)。

df1_mean:

  A_mean B_mean C_mean D_mean E_mean
1 10 15 12 25 29

df1_sd:

  A_sd B_sd C_sd D_sd E_sd
1 3 2 5 4 2

df2:

  A  B  C  D  E
1 20 32 12 14 22
2 21 35 14 52 13
3 25 23 21 32 35
4 23 12 11 52 21
5 20 53 43 12 64
6 30 12 23 53 31

理想情况下,我想为每个变量(即 A、B、C、 D, E)在df2中,然后根据公式mutate()一个新列,并为每个输出新列。

对于每个变量,最终结果应该如下所示:

df2$A_output = (df2$A - df1$A_mean)/df1$A_sd

谁知道是否有办法使用来自不同数据集的数据来mutate() 新列?或者,什么是最简单的自动化方法而不是手动使用 A_output = (A-10)/3, B_output = (B-15)/2, ...?谢谢!

最佳答案

这里有一些基本的 R 选项:

  • 使用rep
dfout <- (df2 - df1_mean[rep(1,nrow(df2)),])/df1_sd[rep(1,nrow(df2)),]
  • 使用扫描
dfout <- sweep(sweep(df2,2,unlist(df1_mean)),2,unlist(df1_sd),FUN = `/`)

都给

> dfout
A B C D E
1 3.333333 8.5 0.0 -2.75 -3.5
2 3.666667 10.0 0.4 6.75 -8.0
3 5.000000 4.0 1.8 1.75 3.0
4 4.333333 -1.5 -0.2 6.75 -4.0
5 3.333333 19.0 6.2 -3.25 17.5
6 6.666667 -1.5 2.2 7.00 1.0

数据

> dput(df1_mean)
structure(list(A_mean = 10L, B_mean = 15L, C_mean = 12L, D_mean = 25L,
E_mean = 29L), class = "data.frame", row.names = "1")

> dput(df1_sd)
structure(list(A_sd = 3L, B_sd = 2L, C_sd = 5L, D_sd = 4L, E_sd = 2L), class = "data.frame", row.names = "1")

> dput(df2)
structure(list(A = c(20L, 21L, 25L, 23L, 20L, 30L), B = c(32L,
35L, 23L, 12L, 53L, 12L), C = c(12L, 14L, 21L, 11L, 43L, 23L),
D = c(14L, 52L, 32L, 52L, 12L, 53L), E = c(22L, 13L, 35L,
21L, 64L, 31L)), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6"))

关于r - 根据不同的数据集改变新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64228092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com