将数据框归一化的每列,该列具有不在数据集中的特定最大值

发布于 2025-01-24 02:12:26 字数 490 浏览 0 评论 0原文

您好,我有一个带有20列的数据框架,但这是可重复的副本:

test_df <- data.frame(a = sample(1:20,7), b = sample(1:50,7), c= sample(1:29,7) )
max_values <- c(20,50,29)

我想用其“ max_values”的相应索引将每个列标准化,请不要假设每个列的最大值都等于最大值i i希望该列被标准化为。如果它超过1且低于零,则可以。最大值是阈值,我希望观察我所拥有的数据如何超越或下方。我们可以假设最小值始终将是0,所以我将它们从方程式中移开:

normalize <- function(x,y) {
  return ((x - 0) / (y - 0))
}

lapply(test_df, normalize)

我已经编写了上面的代码,但是我不知道如何设置它,以便每次迭代都对应于不同的索引” max_values”

Hello I have a data frame with 20 columns but here is a reproducible copy:

test_df <- data.frame(a = sample(1:20,7), b = sample(1:50,7), c= sample(1:29,7) )
max_values <- c(20,50,29)

I want to normalize each column with the corresponding index of its "max_values", please do not assume each column's max value is going to be equal to the max value I want that column to be normalized as. It is okay if it goes above 1 and below zero. The max values are the thresholds and I would like the observe how the data I have goes beyond or below it. We can assume that the min values are ALWAYS going to be 0, so I took them away from the equation:

normalize <- function(x,y) {
  return ((x - 0) / (y - 0))
}

lapply(test_df, normalize)

I have written the code above, but I do not know how to set it so that each iteration corresponds to a different index of "max_values"

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

玻璃人 2025-01-31 02:12:26

您可以使用比例

scale(test_df, center = FALSE, scale = max_values)
#         a    b         c
#[1,] 0.85 0.98 0.4827586
#[2,] 0.25 0.94 0.6896552
#[3,] 0.05 0.48 0.8965517
#[4,] 0.50 0.14 0.6206897
#[5,] 0.20 0.72 0.5172414
#[6,] 0.10 0.50 0.1034483
#[7,] 1.00 0.74 0.3103448
#attr(,"scaled:scale")
#[1] 20 50 29

或除以列表

test_df / as.list(max_values)

数据

set.seed(42)
test_df <- data.frame(a = sample(1:20, 7),
                      b = sample(1:50, 7),
                      c = sample(1:29, 7))

You might use scale

scale(test_df, center = FALSE, scale = max_values)
#         a    b         c
#[1,] 0.85 0.98 0.4827586
#[2,] 0.25 0.94 0.6896552
#[3,] 0.05 0.48 0.8965517
#[4,] 0.50 0.14 0.6206897
#[5,] 0.20 0.72 0.5172414
#[6,] 0.10 0.50 0.1034483
#[7,] 1.00 0.74 0.3103448
#attr(,"scaled:scale")
#[1] 20 50 29

Or divide by a list

test_df / as.list(max_values)

data

set.seed(42)
test_df <- data.frame(a = sample(1:20, 7),
                      b = sample(1:50, 7),
                      c = sample(1:29, 7))
眉目亦如画i 2025-01-31 02:12:26

尝试以下操作:

t(apply(test_df,1,function(x) x/max_values))
        a    b         c
[1,] 0.40 0.74 0.7586207
[2,] 0.65 0.40 0.6206897
[3,] 0.50 0.70 0.2413793
[4,] 0.60 1.00 0.9310345
[5,] 0.10 0.04 0.6551724
[6,] 0.95 0.80 0.8275862
[7,] 0.20 0.66 0.1034483

只要max_valuestest_df具有相同顺序的列,您只需要行行行。烦人的应用为您提供了行和COLS切换的结果。 t将它们切换回。

Try this:

t(apply(test_df,1,function(x) x/max_values))
        a    b         c
[1,] 0.40 0.74 0.7586207
[2,] 0.65 0.40 0.6206897
[3,] 0.50 0.70 0.2413793
[4,] 0.60 1.00 0.9310345
[5,] 0.10 0.04 0.6551724
[6,] 0.95 0.80 0.8275862
[7,] 0.20 0.66 0.1034483

As long as max_values and test_df have the columns in the same order, you just need to go row by row. Annoyingly apply give you the result with rows and cols switched. t switches them back.

时间你老了 2025-01-31 02:12:26

使用mapply如果您的功能中有多个参数:

mapply(normalize, test_df, max_values)

Use mapply if you have more than one parameter in your function:

mapply(normalize, test_df, max_values)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文