如何select列基于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<-子集(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,,如果需要,可以更改 0.50 阈值,如果有额外的列,则可以扩展 2:5 或者如果您愿意,甚至可以将 "Perc" 替换为 1414

希望这能奏效。