[英]R increment vector in for-loop
我有一個表稱為61列的“ pvalue”:
我嘗試在每列上執行for循環(選擇Pvalue <0.01),但是我無法將IdEch記錄在向量中。 我只有列號...沒有用...我找不到解決方法...
這是我的腳本:
res = data.frame()
list_pvalue = c()
for (i in 2:ncol(pvalue)) {
res = subset( pvalue , pvalue[,i] < 0.01 )
list_pvalue = c(res$IdEch,list_pvalue)
}
list_pvalue = unique(list_pvalue)
你快到了。 您想為每行查找任何 pvalue < 0.01
行。
要對每一行執行某項操作,請使用apply
。 要查看是否有any
真值,請使用any
( ?apply
, ?any
)
# pvalue[, -1] selects all but the first column
# pvalue[, -1] < 0.01 is a logical dataframe of TRUE/FALSE
# apply(X, 1, FUN) applys FUN to each row of X
# apply(pvalue[, -1] < 0.01, 1, any) is TRUE for each row that has a pvalue < 0.01
pvalue[apply(pvalue[, -1] < 0.01, 1, any), ] # is what you are after
請嘗試以下示例
#dummy data
set.seed(123)
pvalue <- data.frame(IdEch=paste0("ID",1:10),
Pvalue1=runif(10,0,0.05),
Pvalue2=runif(10,0,0.05),
Pvalue3=runif(10,0,0.05),
Pvalue4=runif(10,0,0.05),stringsAsFactors = FALSE)
pvalue
# IdEch Pvalue1 Pvalue2 Pvalue3 Pvalue4
# 1 ID1 0.014378876 0.047841667 0.044476966 0.048151212
# 2 ID2 0.039415257 0.022666708 0.034640170 0.045114952
# 3 ID3 0.020448846 0.033878532 0.032025341 0.034535264
# 4 ID4 0.044150870 0.028631670 0.049713489 0.039773371
# 5 ID5 0.047023364 0.005146234 0.032785290 0.001230684
# 6 ID6 0.002277825 0.044991249 0.035426523 0.023889799
# 7 ID7 0.026405274 0.012304387 0.027203301 0.037922977
# 8 ID8 0.044620952 0.002102977 0.029707101 0.010820397
# 9 ID9 0.027571751 0.016396036 0.014457987 0.015909050
# 10 ID10 0.022830737 0.047725182 0.007355682 0.011581289
pvalue[ rowSums(pvalue[,-1] < 0.01) > 1, "IdEch" ]
# [1] "ID5"
pvalue[-1]
給出不帶IdEch列的數據幀。 將pmin
應用於此可以在每一行中提供最小值。 如果某個值小於0.01,則最小值為。
do.call("pmin", pvalue[-1]) < 0.01
然后為您提供具有較小值的rowindices。 以便
pvalue[do.call("pmin", pvalue[-1]) < 0.01]
應該是你想要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.