如果该行包含 "TRUE",则保留该行
keep that row if it contains any "TRUE"
我有一个 table 看起来像这个
C1 C2 C3 C4 C5....
R1 FALSE FALSE TRUE TRUE
R2 FALSE FALSE NA TRUE
R3 NA NA NA TRUE
R4 NA FALSE FALSE FALSE
R5 NA NA NA NA
.
.
.
我想保留至少包含一个 TRUE 的所有行。在这个table中,需要保留R1、R2、R3。然后,我可以从同一个 table 中提取另一列 (C21) 的值。
请多多指教,谢谢!
我们可以在逻辑矩阵 (df1 & !is.na(df1)
) 上使用 rowSums
,检查总和是否大于 0,使用该逻辑向量对行进行子集化。
Subdf <- df1[rowSums(df1 & !is.na(df1)) >0,]
Subdf
# C1 C2 C3 C4
#R1 FALSE FALSE TRUE TRUE
#R2 FALSE FALSE NA TRUE
#R3 NA NA NA TRUE
或者我们可以在rowSums
中使用na.rm=TRUE
df1[rowSums(df1, na.rm=TRUE) > 0,]
我们可以通过Subdf$C21
或Subdf[['C21']]
(如果初始数据集是data.frame
)或Subdf[, 'C21']
提取'C21'列matrix
(在示例中,我没有 21 列)
# Example
x <-
matrix(c(FALSE, FALSE, NA, NA, NA, FALSE, FALSE, NA, FALSE, NA, TRUE, NA, NA, FALSE, TRUE, TRUE, FALSE, NA),
nrow = 5, ncol = 4, dimnames = list(paste0("R", 1:5), paste0("C", 1:4)))
x
# C1 C2 C3 C4
# R1 FALSE FALSE TRUE TRUE
# R2 FALSE FALSE NA FALSE
# R3 NA NA NA NA
# R4 NA FALSE FALSE FALSE
# R5 NA NA TRUE FALSE
# apply the 'any()' function to the rows, this will return true if there is at
# least one TRUE in the row
apply(x, 1, any)
# R1 R2 R3 R4 R5
# TRUE NA NA NA TRUE
# use 'which' to get the row index
which(apply(x, 1, any))
# R1 R5
# 1 5
# subset the matrix
idx <- which(apply(x, 1, any))
x[idx, ]
# C1 C2 C3 C4
# R1 FALSE FALSE TRUE TRUE
# R5 NA NA TRUE FALSE
apply(X = df1, 1, any)
会给你一个逻辑向量,然后你可以相应地使用它
即df1[which(apply(df1, 1, any)), ]
我有一个 table 看起来像这个
C1 C2 C3 C4 C5....
R1 FALSE FALSE TRUE TRUE
R2 FALSE FALSE NA TRUE
R3 NA NA NA TRUE
R4 NA FALSE FALSE FALSE
R5 NA NA NA NA
.
.
.
我想保留至少包含一个 TRUE 的所有行。在这个table中,需要保留R1、R2、R3。然后,我可以从同一个 table 中提取另一列 (C21) 的值。
请多多指教,谢谢!
我们可以在逻辑矩阵 (df1 & !is.na(df1)
) 上使用 rowSums
,检查总和是否大于 0,使用该逻辑向量对行进行子集化。
Subdf <- df1[rowSums(df1 & !is.na(df1)) >0,]
Subdf
# C1 C2 C3 C4
#R1 FALSE FALSE TRUE TRUE
#R2 FALSE FALSE NA TRUE
#R3 NA NA NA TRUE
或者我们可以在rowSums
na.rm=TRUE
df1[rowSums(df1, na.rm=TRUE) > 0,]
我们可以通过Subdf$C21
或Subdf[['C21']]
(如果初始数据集是data.frame
)或Subdf[, 'C21']
提取'C21'列matrix
(在示例中,我没有 21 列)
# Example
x <-
matrix(c(FALSE, FALSE, NA, NA, NA, FALSE, FALSE, NA, FALSE, NA, TRUE, NA, NA, FALSE, TRUE, TRUE, FALSE, NA),
nrow = 5, ncol = 4, dimnames = list(paste0("R", 1:5), paste0("C", 1:4)))
x
# C1 C2 C3 C4
# R1 FALSE FALSE TRUE TRUE
# R2 FALSE FALSE NA FALSE
# R3 NA NA NA NA
# R4 NA FALSE FALSE FALSE
# R5 NA NA TRUE FALSE
# apply the 'any()' function to the rows, this will return true if there is at
# least one TRUE in the row
apply(x, 1, any)
# R1 R2 R3 R4 R5
# TRUE NA NA NA TRUE
# use 'which' to get the row index
which(apply(x, 1, any))
# R1 R5
# 1 5
# subset the matrix
idx <- which(apply(x, 1, any))
x[idx, ]
# C1 C2 C3 C4
# R1 FALSE FALSE TRUE TRUE
# R5 NA NA TRUE FALSE
apply(X = df1, 1, any)
会给你一个逻辑向量,然后你可以相应地使用它
即df1[which(apply(df1, 1, any)), ]