如何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
。
希望这能奏效。
我有一个包含行名和列名的值矩阵,如此处所示。
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
。
希望这能奏效。