[英]How to select columns based on criteria in a certain row in R
我有一個包含行名和列名的值矩陣,如下所示。
C5.Outliers
Days J1 J2 J3 J4
0.01 458 -160 -151 -52
0.02 459 -163 -154 -46
0.03 457 -165 -150 -51
Perc 0.99 0.04 0.00 0.52
我想僅使用“ Perc”行的值為= <50.0的列創建一個單獨的矩陣。 在此示例中,我將提取列J2和J3。
這是我嘗試的無效代碼(“ Perc”行是矩陣上的第1414行):C5.Final <-subset(C5.Outliers,1414 <.51)
假定您的意思是<= 0.50
而不是<= 50
因為所有“ Perc”均小於50。您可以
df[, unlist(df["Perc",]) <= 0.5]
# J2 J3
# 0.01 -160.00 -151
# 0.02 -163.00 -154
# 0.03 -165.00 -150
# Perc 0.04 0
但這可能更安全,並考慮了“ Perc”中可能出現的所有NA
值。
u <- unlist(df["Perc",]) <= 0.50
df[, u & !is.na(u)]
另外,如果需要,可以通過在unlist()
添加use.names = FALSE
來加快速度。 最后,如果您有一個矩陣而不是一個數據框,則可以一起刪除unlist()
。
我假設您的意思是0.50,因為所有帶有“ Perc”的列均高於50.0。
這可能不是最好的方法,但是它可以工作:
#data:
df <- data.frame(Days=c(0.01,0.02,0.03,"Perc"),J1=c(458,459,457,0.99),
J2 =c(-165,-163,-160,0.04),J3=c(-151,-153,-131,0.00),J4=c(-52,-45,-51,0.52))
dfc <- subset(df,,select= which(c(TRUE,(df[which(df$Days == "Perc"), ] <= 0.50)[2:5])))
dfc
Days J2 J3
1 0.01 -165.00 -151
2 0.02 -163.00 -153
3 0.03 -160.00 -131
4 Perc 0.04 0
如果您不希望使用df$Days
變量TRUE,
則可以刪除TRUE,
如果需要,可以更改0.50
閾值,如果有多余的列,則將閾值擴展為2:5
如果願意,甚至可以用1414
代替"Perc"
。
希望這行得通。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.