【问题标题】:how to apply functions to a series of dataframe filtered by categorical variables in R如何将函数应用于由 R 中的分类变量过滤的一系列数据框
【发布时间】:2019-03-15 13:45:02
【问题描述】:

我有一个数据框 df,其中包含 3 个数值变量、1 个结果和 1 个分类变量

我需要执行一个过程,该过程涉及按类别 A 或 B 的不同级别过滤 df,然后将它们转储到 binnedplot 等函数中,以检查分类变量和数值变量之间的交互。

样本df:

set.seed(10)

df=data.frame(num1=sample(100,60), 
              num2=sample(100,60), 
              num3=sample(100,60),
              category=as.factor(rep(c("A","B"),30)),
              outcome=sample(c(0,1),60, replace=T))

   df1=df%>%filter(category=="A")
   df2=df%>%filter(category=="B")

binnedplot(df1$num1, df1$outcome)
binnedplot(df2$num1, df2$outcome)

binnedplot(df1$num2, df1$outcome)
binnedplot(df2$num2, df2$outcome)

binnedplot(df1$num3, df1$outcome)
binnedplot(df2$num3, df2$outcome)

更新:

split.dfs<-split(df, df$category)
par(mar=c(1,1,1,1))
par(mfcol=c(2,1))
lapply(split.dfs, function(x) lapply(df[1:3], function(x) binnedplot(x, df$outcome, main=df$category)))

最初我想知道如何通过函数以更具可扩展性的方式做到这一点,例如我可以处理更多的数字和分类列而无需过多重复。

现在使用更新的代码(仍然有错误),我的主要问题是如何使用正确的类别标题标记 3 个 2x1 面板以及如何使用 num1/num2/num3 标记 x 轴以使绘图清晰。

【问题讨论】:

  • 你可以split 'df' by 'category'
  • 感谢我更新了我尝试的代码,现在唯一剩下的问题是如何为图表命名以便我知道哪个是哪个

标签: r function apply


【解决方案1】:

您可以使用bylapply 的组合:

library(arm)

by(df, df$category,
   function(x) lapply(subset(x, select = -c(category, outcome)),
                      binnedplot, x$outcome))

【讨论】:

  • 非常感谢您的回答!今天学了点儿新东西。我已经用我的尝试和剩余问题更新了问题。
猜你喜欢
  • 1970-01-01
  • 2014-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-28
  • 2021-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多