【问题标题】:Create a single table providing the mean values of column A across columns B and C in R [duplicate]创建一个表,提供 R 中 B 列和 C 列的 A 列平均值 [重复]
【发布时间】:2020-08-07 11:26:39
【问题描述】:

我想使用 xtabs() 函数(在 R 中)创建一个给定 3 列数据框的列联表。下面的代码适用于 2 列:

xtabs(~B + C, data = theData) #contingency table for two columns

但是当我再添加一个属性时,我得到一个错误:

xtabs(~B + C + mean(A), data = theData)

Error in model.frame.default(formula = ~B + C +  : 
  variable lengths differ (found for 'mean(A)')

例如对于下面的数据框

A   B   C
1   b1  c1
2   b1  c1
3   b1  c2
1   b1  c2
4   b2  c2
7   b2  c1

输出应该是这样的:

B   C   A
b1  c1  1.5
    c2  2.0
b2  c1  7.0
    c2  4.0

创建一个表的正确方法是什么,其中一列的平均值跨过另一(不同的)两列?谢谢

【问题讨论】:

    标签: r contingency


    【解决方案1】:

    我们可以在用aggrregate总结输出后使用xtabs

    xtabs(A ~ B + C , data = aggregate(A ~ B + C, theData, FUN = mean))
    #   C
    #B     c1  c2
    #  b1 1.5 2.0
    #  b2 7.0 4.0
    

    或者在这种情况下,输出可以只是aggregate

    aggregate(A ~ B + C, theData, FUN = mean)
    #   B  C   A
    #1 b1 c1 1.5
    #2 b2 c1 7.0
    #3 b1 c2 2.0
    #4 b2 c2 4.0
    

    不建议将某些值更改为空白"",因为这可能会导致其他步骤出现问题

    【讨论】:

    • 感谢您的及时回复。此 sn-p 返回 A 列的总体平均值,而不是考虑给定 B 和 C 的值的平均 A 值。就像 B=b1 和 C=c1 的元组一样,平均 A 值为 a1,依此类推。有没有办法做到这一点?
    • 帖子已修改
    猜你喜欢
    • 2021-06-27
    • 2022-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 2021-12-04
    • 2020-07-15
    • 2020-08-22
    相关资源
    最近更新 更多