【发布时间】:2018-12-24 18:52:20
【问题描述】:
没有复杂的解释,让我们创建一个小的示例数据框:
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])
其中j列索引A,B或C; 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 中的值吗?
谢谢。
【问题讨论】: