簡體   English   中英

r從重復循環輸出創建矩陣

[英]r create matrix from repeat loop output

對於某個向量N每個值n ,我想為數據幀T每個變量計算超過n的值的百分比。

考慮以下輸入數據幀:

T <- data.frame(A=c(0.1,0.2,0.3), B=c(0.3,0.3,0.9),C=c(1,0.5,0))
T
#     A   B   C
# 1 0.1 0.3 1.0
# 2 0.2 0.3 0.5
# 3 0.3 0.9 0.0

我希望輸出是看起來像這樣的矩陣:

        A      B        C
n=0.1  66.6  100     66.6
n=0.2  33.3  100     66.6

我當前的實現無法正常工作:

 n <- 0.8
 repeat {
       Tlogic <- T > n
       TU <- as.matrix(apply(Tlogic,2,sum))

        q = NULL
        for (i in seq(along=TU[,1]))
            {
              percent <- (TU[i]/nrow(T))*100
              q = c(q, percent)
            }
         n <- n - 0.05;
 print(n);
 if(log(n) < -6) break
 }

基本上,您要為向量N每個值n計算T中每列中超過n的值的百分比。

實際上,您可以通過從寫出循環的解決方案轉到使用R中的*apply函數的解決方案來在R中的一行中執行此操作:

N <- c(0.1, 0.2)
do.call(rbind, lapply(N, function(n) c(n=n, 100*colMeans(T > n))))
#        n        A   B        C
# [1,] 0.1 66.66667 100 66.66667
# [2,] 0.2 33.33333 100 66.66667

對於N每個值n ,調用lapply(N, function(n) c(n=n, 100*colMeans(T > n)))計算一個向量,該向量指示n以及n中每個列的值百分比T超過n 然后do.call(rbind, ...)將所有這些分組在一起,形成最終的輸出矩陣。

在您的情況下,您希望N形成一個從0.8到log(n) < -6的遞減序列(每步減少0.05 log(n) < -6 在這種情況下,您可以獲得N向量:

N <- seq(.8, 0, -.05)
N <- N[log(N) >= -6]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM