我有一张像这样的表
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的所有行。在此表中,需要保留R1,R2和R3。然后,我可以从同一个表中提取另一列(C21)的值。
请给我一些建议,谢谢!
答案 0 :(得分:4)
# 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
答案 1 :(得分:3)
apply(X = df1, 1, any)
将为您提供一个逻辑向量,然后您可以使用
即。 df1[which(apply(df1, 1, any)), ]
答案 2 :(得分:1)
我们可以在逻辑矩阵(rowSums
)上使用df1 & !is.na(df1)
,检查总和是否大于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
或者我们可以使用na.rm=TRUE
rowSums
df1[rowSums(df1, na.rm=TRUE) > 0,]
我们可以提取出C21&#39; Subdf$C21
或Subdf[['C21']]
的列(如果初始数据集为data.frame
)或Subdf[, 'C21']
的{{1}}(在此示例中,我没有21列)