如何解决如何在 R 中创建一个函数来返回表中每个数字的百分比并跳过任何 0 数字
我需要使用 R 在表中创建一个函数,该函数返回以水平顺序移动,并且不计算任何 0 数。例如见下表:
1 3 11
0 1 1
2 1 4
0 1 5
0 1 4
第一个数字将被计算为 1/15*100 = 7%, 然后下一个将是 2/7*100 = 29% 然后下一个将是 3/15*100... 0 个号码将被跳过。
解决方法
我们可以沿着 proportions
使用 margin = 1
,例如,
> proportions(as.matrix(df),1)
V1 V2 V3
[1,] 0.06666667 0.2000000 0.7333333
[2,] 0.00000000 0.5000000 0.5000000
[3,] 0.28571429 0.1428571 0.5714286
[4,] 0.00000000 0.1666667 0.8333333
[5,] 0.00000000 0.2000000 0.8000000
数据
> dput(df)
structure(list(V1 = c(1L,0L,2L,0L),V2 = c(3L,1L,1L),V3 = c(11L,4L,5L,4L)),class = "data.frame",row.names = c(NA,-5L))
,
我们可以在apply
中使用base R
100 *df/apply(df,1,sum)
V1 V2 V3
1 6.666667 20.00000 73.33333
2 0.000000 50.00000 50.00000
3 28.571429 14.28571 57.14286
4 0.000000 16.66667 83.33333
5 0.000000 20.00000 80.00000
,
您可以使用按行求和来划分数据帧。
res <- df/rowSums(df) * 100
res
# V1 V2 V3
#1 6.666667 20.00000 73.33333
#2 0.000000 50.00000 50.00000
#3 28.571429 14.28571 57.14286
#4 0.000000 16.66667 83.33333
#5 0.000000 20.00000 80.00000
要忽略 0 个值,您可能需要将它们转换为 NA
。
res[res == 0] <- NA
res
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。