如何根据R中某一行的条件选择列

时间:2015-08-19 15:42:20

标签: r subset

我有一个包含行名和列名的值矩阵,如下所示。

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     

我想创建一个单独的矩阵,只使用行的值为#34; Perc"是=< 50.0。在这个例子中,我将提取列J2和J3。

这是我尝试的代码,它不起作用(" Perc"行是我的矩阵上的行#1414): C5.Final< -subset(C5.Outliers,1414< .51)

2 个答案:

答案 0 :(得分:2)

大概你的意思是<= 0.50而不是<= 50因为所有&#34; Perc&#34;小于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

但这可能会更安全,并考虑到可能出现在&#34; Perc&#34;中的任何NA值。

u <- unlist(df["Perc",]) <= 0.50
df[, u & !is.na(u)]

此外,如果需要,可以在use.names = FALSE中添加unlist()来加快速度。最后,如果你有一个矩阵而不是数据框,那么你可以一起删除unlist()

答案 1 :(得分:0)

我假设你的意思是0.50因为所有的列都带有&#34; Perc&#34;高于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

如果您不想要TRUE,变量,则可以移除df$Days,如果需要,可以更改0.50阈值,如果您有额外的列,甚至可以替换2:5如果你愿意的话"Perc"1414

希望这有效。