【问题标题】:How to separate factor interactions in R如何在 R 中分离因子相互作用
【发布时间】:2016-07-07 07:51:01
【问题描述】:

我最近不得不根据因素的交互作用绘制一些数据,我发现这比我认为 R 中这种常见的东西要困难得多。我怀疑我遗漏了一些东西。假设我有一个由 30 个数字和一对因子组成的向量。

n <- runif(30, min=0, max=10)
a <- gl(2, 1, 30)
b <- gl(6, 2, 30)

我想要每个因素组合的平均值。

y <- tapply(n, a:b, mean)

现在我想使用格子 xyplot 来绘制这些均值,其中我为a 的两个值分别设置了一个面板。均值是y 值,b 因子是x 值。股票 xyplot 公式类似于

xyplot( y ~ b | a, data=mydf)

其中mydf 是一个数据框,其中包含yb 和,a 列,这些列是从上面的tapply 计算得出的。但我的问题是如何解开相互作用的因素。这就是我所做的。

factorSplit <- strsplit(names(y), ":")
a1 <- sapply(factorSplit, function(x) {x[1]})
b1 <- sapply(factorSplit, function(x) {x[2]})
mydf <- data.frame(y, b1, a1)

现在mydf

> mydf
           y b1 a1
1:1 3.856797  1  1
1:2 3.487181  2  1
1:3 8.411425  3  1
1:4 3.757709  4  1
1:5 4.982970  5  1
1:6 6.480346  6  1
2:1 2.778864  1  2
2:2 4.390511  2  2
2:3 7.119926  3  2
2:4 4.707945  4  2
2:5 5.546894  5  2
2:6 8.984631  6  2

我可以用

绘图
xyplot(y ~ b1 | a1, mydf, layout=c(1,2))

但我觉得与names(y)strsplit 和然后sapply 的业务是矫枉过正的。似乎应该有一种更直接的方法来恢复使用 tapply 创建的因子交互。

【问题讨论】:

  • 既然你想保留你的ab列,这里最好使用aggregate而不是tapplyy &lt;- aggregate(n~a+b, NULL, mean)
  • aggregate 很不错。但是,当基本分组变得过于混乱时,我通常会求助于dplyr,这使得它非常简单。在这种情况下,data_frame(n, a, b) %&gt;% group_by(a, b) %&gt;% summarise(y = mean(n))
  • 与其用解决方案更新问题,不如将其作为答案发布在下面(可以回答您自己的问题),因为这样问题就不再显得没有答案了。

标签: r tapply split-apply-combine


【解决方案1】:

聚合功能正是我所缺乏的理解。正如 cmets 中所指出的,对 aggregate 的调用完成了我之前苦苦完成的所有工作。

> x <- aggregate(n ~ a+b, NULL, mean)
> head(x)
  a b        n
1 1 1 2.967073
2 2 1 3.001279
3 1 2 3.867564
4 2 2 1.076378
5 1 3 2.805827
6 2 3 6.275858
> dim(x)
[1] 12  3
>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 2021-10-16
    • 2015-02-25
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多