使用rowPercents计算百分比

时间:2014-10-30 23:34:57

标签: r

我试图计算一个百分比总计,比如说,下面这个可重复的例子:

structure(c(197.95, 197.95, 197.95, 186.8, 190.51, 195.16, 199.81, 
202.59, 202.59, 202.59, 92.28, 92.28, 90.07, 89.82, 87.36, 87.61, 
90.56, 89.82, 90.07, 89.82, 20.43, 20.43, 20.43, 20.43, 20.43, 
20.43, 20.43, 20.43, 20.43, 20.64, 24.7, 24.95, 24.54, 23.97, 
23.97, 24.38, 24.38, 24.38, 24.54, 24.54, 37.4, 37.4, 37.4, 35.43, 
35.43, 35.43, 35.43, 35.43, 35.43, 39.37, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 16.05, 
16.05, 16.05, 16.05, 15.62, 15.62, 16.05, 15.62, 15.62, 15.62, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), index = structure(c(470620800, 
470880000, 470966400, 471052800, 471139200, 471225600, 471484800, 
471571200, 471657600, 471744000), tzone = "UTC", tclass = "Date"), .indexCLASS = "Date", .indexTZ = "UTC", tclass = "Date", tzone = "UTC", class = c("xts", 
"zoo"), .Dim = c(10L, 9L), .Dimnames = list(NULL, c("AVON", "BA.", 
"CMRG", "COB", "MGGT", "QQ.", "RR.", "SNR", "ULE")))

我需要返回相同的数据表示,但每个值都是它所属行总数的百分比。我做了很多研究并尝试了prop.table,它返回subscript错误,最后我使用rowPercents这是RcmdrMisc包的一部分。但是,我找不到如何让它忽略我的数据集中的NA

在示例中提供了两列NA的整列。我不能删除它们,因为整个数据集具有后续行的一些值。

请注意,我的示例的类是zooxts

2 个答案:

答案 0 :(得分:2)

您不需要任何外部包。

dat.percent <- dat / rowSums(dat, na.rm = T) * 100

检查它是否有效:

> all(abs(rowSums(dat.percent, na.rm = T) - 100) < 0.0001)
[1] TRUE

答案 1 :(得分:0)

prop.table似乎不适用于xts / zoo对象,但这可行:

library(xts)

prop.table(coredata(x), 1)

它返回所有正确的NA,因为每行中都有一个NA(并且在不知道每个值的情况下无法计算比例)。如果您想将NA值视为零,则:

prop.table( na.fill(coredata(x), 0), 1)
相关问题