gpt4 book ai didi

r - 计算 df 中每个元素的百分比值(基于最大值);但是在指定的列中

转载 作者:行者123 更新时间:2023-12-01 11:15:54 26 4
gpt4 key购买 nike

没有复杂的解释,让我们创建一个小的示例数据框:

A <- c(1,2,3,4)
B <- c(3,4,5,7)
C <- c(3,4,7,3)
D <- c(8,3,2,4)
df <- data.frame(A,B,C,D)

> df
A B C D
1 1 3 3 8
2 2 4 4 3
3 3 5 7 2
4 4 7 3 4

我想使用 apply 函数计算 A、B 和 C 列中的百分比值。基于每行最大值的百分比值,换句话说:

%_to_be_calculated <- df[i,j] * 100 / max(df[i,1:3])

jA, BC 的索引; i 表中的后续行。

期望的输出:

  A     B       C       D
1 33.33 100 100 8
2 50 100 100 3
3 42.85 71.42 100 2
4 57.14 100 42.85 4

我的解决方案:

apply(df,1,function(i) lapply(i[1:3],function(j) j*100/max(i[1:3])))

它有效,但它返回列表的列表...我想要一个漂亮的 df,你能给我一个线索如何替换当前 df 中的值吗?

谢谢。

最佳答案

有多种方法可以做到这一点。

正常的应用方式:

df[1:3] <- t(apply(df[1:3], 1, function(x) x/max(x) * 100))
df

# A B C D
#1 33.33333 100.00000 100.00000 8
#2 50.00000 100.00000 100.00000 3
#3 42.85714 71.42857 100.00000 2
#4 57.14286 100.00000 42.85714 4

也可以通过以下方式完成:

df[1:3] <- df[1:3] * 100/apply(df[1:3], 1, max)

更快的方法是使用 do.callpmax

df[1:3] <- df[1:3] * 100 /do.call(pmax, df[1:3])

关于r - 计算 df 中每个元素的百分比值(基于最大值);但是在指定的列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51375124/

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