微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 R 中创建一个函数来返回表中每个数字的百分比并跳过任何 0 数字

如何解决如何在 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 举报,一经查实,本站将立刻删除。