1

我有一个类似的数据集:

val<-c("Y","N")
test<-data.frame(age=rnorm(n=100,mean=50,sd=10),var1=sample(val,100,T),var2=sample(val,100,T),var3=sample(val,100,T),sex=sample(c("F","M"),100,T))

我想创建一个使用 Hmisc 报告每个类别的平均年龄的摘要。

library(Hmisc)
summary.formula(age~sex+var1+var2+var3,data=test)

但是,var1-var3 实际上属于同一分类变量,级别为 var1、var 和 var3,而不是 Y/N。此外,这些并不是相互排斥的。那么,是否有可能以某种方式创建一个具有这些不同级别的变量 var4,这些级别不是互斥的并且类型

summary.formula(age~sex+var4,data=test)

并有如下输出:

+-------+-+---+----+
|       | |N  |age |
+-------+-+---+----+
|sex    |F| 44|48.0|
|       |M| 56|50.8|
+-------+-+---+----+
|var4   |var1| xx|yy|
|       |var2| xx|yy|
        |var3| xx|yy|
+-------+-+---+----+
|Overall| |100|49.6|
+-------+-+---+----+

任何帮助将非常感激...

4

2 回答 2

1

怎么样paste0?(或 paste(..., sep='') 如果您不在 R2.15 上)

> test$var4 <- paste0(test$var1, test$var2, test$var3)
> summary.formula(age~sex+var4, data=test)
age    N=100

+-------+---+---+--------+
|       |   |  N|     age|
+-------+---+---+--------+
|    sex|  F| 50|50.25440|
|       |  M| 50|51.32134|
+-------+---+---+--------+
|   var4|NNN| 13|46.64417|
|       |NNY| 17|51.34456|
|       |NYN| 15|52.92185|
|       |NYY| 17|47.35685|
|       |YNN|  9|50.91647|
|       |YNY|  7|48.04489|
|       |YYN| 10|53.23713|
|       |YYY| 12|56.14394|
+-------+---+---+--------+
|Overall|   |100|50.78787|
+-------+---+---+--------+
> 
于 2012-05-04T21:13:53.733 回答
0

我认为问题在于您正在尝试将两个不同数据集的统计信息结合起来:

  1. 按人索引的数据:

    summary.formula(age~sex, test)
    
    # age    N=100
    # 
    # +-------+-+---+--------+
    # |       | |N  |age     |
    # +-------+-+---+--------+
    # |sex    |F| 35|49.99930|
    # |       |M| 65|48.96266|
    # +-------+-+---+--------+
    # |Overall| |100|49.32548|
    # +-------+-+---+--------+
    
  2. 汽车索引的数据

在这里,每辆车需要一排;这是创建数据的一种方法,但我相信一定有更好的方法:

    var1 <- subset(test, var1 == "Y", c("age", "sex"))
    var2 <- subset(test, var2 == "Y", c("age", "sex"))
    var3 <- subset(test, var3 == "Y", c("age", "sex"))
    var1$var <- "var1"
    var2$var <- "var2"
    var3$var <- "var3"
    vars <- rbind(var1, var2, var3)

然后,汇总统计:

    summary.formula(age~var, data=vars)
    # age    N=147
    # 
    # +-------+----+---+--------+
    # |       |    |N  |age     |
    # +-------+----+---+--------+
    # |var    |var1| 47|48.91983|
    # |       |var2| 43|46.31811|
    # |       |var3| 57|49.35292|
    # +-------+----+---+--------+
    # |Overall|    |147|48.32672|
    # +-------+----+---+--------+

如您所见,Overall两个摘要的部分不匹配,因为它们来自两个不同的数据集。(而且不可能按照您的要求将它们组合起来。)

于 2012-05-05T12:25:38.847 回答