R中的子集:从多个列中提取逻辑因子

时间:2019-02-20 02:12:41

标签: r subset

我想知道如何根据条件在R中进行子集化。我有一个带有10列的大对象,这8列是合乎逻辑的。我想从总数8中提取任意4列的所有值TRUE。

1 个答案:

答案 0 :(得分:0)

请参阅下文。我创建了一个包含true / false变量名称的向量。 R将TRUE解释为1,FALSE解释为0;因此,在跨行求和时,我们希望保留总和为4或更大的行。 rowSums(df[,tf_vars]) >= 4创建一个TRUE / FALSE向量,该向量指示该行具有4个或更多true的位置。 (请注意,df[,tf_vars]将对数据框的列进行子集设置,仅将变量保留在tf_vars中)。然后,我使用该向量对数据帧进行子集化。

# Create dummy dataframe
df <- data.frame(matrix(nrow=100, ncol=0))
for(i in 1:8){
  df[[paste0("TFvar",i)]] <- sample(100, x=c(T,F), prob=c(.5,.5), replace=T)
}

# Subset dataframe where at least 4 of the columns are true
tf_vars <- c("TFvar1", "TFvar2", "TFvar3", "TFvar4", "TFvar5", "TFvar6", "TFvar7", "TFvar8")

  # (or you could use this to grab the variable names that are TRUE/FALSE variables.)
  tf_vars <- names(apply(df, FUN=is.logical, 2))


df_subset <- df[rowSums(df[,tf_vars]) >= 4,]