我有一个包含行名和列名的值矩阵,如下所示。
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)
答案 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
。
希望这有效。