基于R中包含变量名的对象的子集数据框

Subset dataframe based on object containing variable name in R

我有一个可以更改的对象 (var),其中包含数据框 df 的任何变量的名称。我正在尝试创建一个可以根据此变量的值进行子集化的循环。

df[df$var == "value", 3]
for(l in levels(outcome){
   for(i in names(df)){
      list <- table(df[df$i == l, 3])
   }
 }

上面的循环应该 return 数据框中每个变量的表列表,当该变量等于特定值时。

以下面的玩具数据集为例:

df <- data.frame(person, salary, haircolor, outcome)
head(df)
          person salary haircolor  outcome
1       John Doe  21000    black   married
2     Peter Gynn  23400    blonde  divorced
3     Jolie Hope  26800    blonde  divorced
4      Tom Hanks  40000    brown   married
5 Angelina Jolie  20330    brown   divorced
6      Peter Pan  23020    blonde  married

对于 l == married 的所有值,如果 i = outcome(但 i 可以是任何东西,这就是重点),预期输出如下:

>table(df[df$outcome == 'married', 3])
black blonde  brown 
     2      1      0 

但是,我想强调的是,变量名称和值是要循环遍历每个变量的,因此可以更改。

也许编写一个函数会有所帮助:

get_counts <- function(data, i, l) {
  table(data[data[[i]] == l, 3])
}

然后您可以将列名和值传递给数据框中的子集并使用 table

进行计数
get_counts(df, 'outcome', 'married')

# black blonde  brown 
#     1      1      1