基于指标变量的子集数据框

时间:2018-06-16 19:19:52

标签: r

使用R,一个子集如何根据列向量来显示具有指示符变量的数据帧?

# Dataframe with 3 indicator variables - a, b, and c
df = data.frame(a = c(1, 0), b = c(1, 1), c = c(0, 1))

subset.iv = function (df, cols) {
    # ???
}

# Subset rows that match a or c (i.e. a=1 or c=1):
subset.iv(df, c('a', 'c'))

# Subset rows that match b (i.e. b=1):
subset.iv(df, c('b'))

我知道如何根据已知/静态条件(例如df[df$a == 1 | df$b == 1,])对数据框进行子集化。

但在这种情况下,问题是我无法编写条件表达式,因为我不知道要检查的列数或列本身。

此外,subset不允许传递自定义函数,我可以在其中解析向量并检查列。

2 个答案:

答案 0 :(得分:0)

假设你的指标是肯定的,零指的是否,那么像这样的东西可能会起作用

subset.iv = function (df, cols) {
  df[rowSums(df[cols])>0, ]
  }

给予

> subset.iv(df, c('a', 'c'))
  a b c
1 1 1 0
2 0 1 1
> subset.iv(df, c('b'))
  a b c
1 1 1 0
2 0 1 1
> subset.iv(df, c('c'))
  a b c
2 0 1 1

答案 1 :(得分:0)

我想我找到了另一种思考方式,并提出了这个解决方案。不确定它是否非常有效,但欢迎反馈...

matchIV = function(row) {
  for(cn in cols){
    if(row[[cn]] == 1) {
      return(TRUE)
    }
  }
  return(FALSE)
}

sel <- apply(df,1,matchIV)

df2 = df[sel,]