【问题标题】:Table generation R表生成 R
【发布时间】:2012-05-04 20:28:04
【问题描述】:

我有一个类似的数据集:

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|
+-------+-+---+----+

任何帮助将不胜感激......

【问题讨论】:

  • 我不明白你想要什么。我不清楚 Var4 是什么,或者 中的子集应该如何为 Var4 工作。

标签: r


【解决方案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|
+-------+---+---+--------+
> 

【讨论】:

  • 不完全。 Var4 应该只有级别 var1、var2 和 var3——而不是级别的所有不同排列。
  • 所以在新的 var4 中,如果 var1 和 var2 是 Y,您需要在 var4 中输入两个条目(也就是数据中的两行)?
  • 可以说我们正在处理汽车。数据集是用 (var1)nissan、(var2)Lexus 等输入的,现在每个家庭可以拥有一辆以上的汽车,并且聚合的汽车变量应该包含家庭拥有的所有汽车。不知何故,如果只在公式中输入汽车就可以为 lexus 和 nissan 生成一个包含不同行的表,而不必对每个是/否变量都这样做......
  • 对于同时拥有尼桑和雷克萨斯的人,您期望什么价值?
  • 因为我正在处理一个汇总表并询问年龄~汽车(或 var4,如果你愿意的话)我想要一个详细说明每个品牌汽车的年龄信息的摘要。
【解决方案2】:

我认为问题在于您试图合并两个不同数据集的统计数据:

  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 部分不匹配,因为它们来自两个不同的数据集。 (而且不可能按照您要求的方式组合它们。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多