簡體   English   中英

如何基於R中某一行的條件選擇列

[英]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.

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