2014-10-30 280 views
0

我試圖計算百分比與總的,可以說,下面的可重複的例子:計算百分比總使用rowPercents

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

+0

@Gregor太棒了,它的工作非常簡單。 – athraa 2014-10-31 00:04:18

回答

2

你不需要這方面的任何外部包裝。

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

檢查它的工作原理:

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

prop.table似乎並不與XTS /動物園對象的工作,但這個工程:

library(xts) 

prop.table(coredata(x), 1) 

它返回所有的NAS這是正確的,因爲有是每行中的NA(並且不知道每個值都不可能計算比例)。如果你想把NA值視爲零,那麼:

prop.table(na.fill(coredata(x), 0), 1)