使用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
不允许传递自定义函数,我可以在其中解析向量并检查列。
答案 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,]