计算数据框中数字和类别变量的百分比

时间:2018-08-27 11:10:51

标签: r dataframe percentage

我有一个数据表,其中包含用于不同类的各种数字和分类变量。我需要对数据进行转换,以使每个变量最终都有一个不同的数据框,其中第一列中记录了该变量的每个值,而其他列中显示了每个类的百分比每个值都在各自的数据集中。因此,每一列都是针对其中一个类的,总计应为100。我用dput()函数编写了示例。

我的数据看起来如何

structure(list(ï..class = structure(c(1L, 2L, 1L, 3L, 3L, 4L, 
3L), .Label = c("A", "B", "C", "D"), class = "factor"), var01 = c(150L, 
70L, 70L, 60L, 220L, 10L, 85L), var02 = c(50L, 30L, 50L, 30L, 
120L, 30L, 35L), var03 = c(1L, 1L, 1L, 1L, 5L, 8L, 3L), var04 = c(1L, 
0L, 1L, 0L, 0L, 1L, 0L), var05 = c(2L, 1L, 1L, 0L, 0L, 3L, 0L
)), class = "data.frame", row.names = c(NA, -7L))

Var01 Var02 Var03 是数字,而 Var04 Var05 是分类的在这个例子中。

每个变量如何使用

structure(list(ï..var01 = c(10L, 60L, 70L, 85L, 150L, 220L), 
A = c(0, 0, 50, 0, 50, 0), B = c(0, 0, 100, 0, 0, 0), C = c(0, 
33.34, 0, 33.34, 0, 33.34), D = c(100, 0, 0, 0, 0, 0)), class = "data.frame", 
row.names = c(NA, -6L))

我尝试了几种方法来自己做,但是鉴于我对R不太满意,所以丝毫没有成功。

干杯

亚历克斯

1 个答案:

答案 0 :(得分:0)

您可以尝试以下方法:

Portfolio_Code

结果:

library(reshape2)
d2 <- dcast(d, var01 ~ iclass, fun.aggregate = length)
d2[,-1] <- 100 * d2[,-1]/colSums(d2[,-1])[col(d2[,-1])]

使用的数据

> d2
  var01  A   B        C   D
1    10  0   0  0.00000 100
2    60  0   0 33.33333   0
3    70 50 100  0.00000   0
4    85  0   0 33.33333   0
5   150 50   0  0.00000   0
6   220  0   0 33.33333   0