【问题标题】:descriptive statistics in table r for multiple variables表 r 中多个变量的描述性统计
【发布时间】:2014-09-18 19:35:32
【问题描述】:

我对 R 完全陌生,我会很感激有人花时间帮助我完成这些可能很简单的任务。我对所有可用资源感到茫然,不知道从哪里开始。

我的数据如下所示:

    subject sex age nR  medL    medR        meanL       meanR   pL  ageBin
1   0146si  1   67  26  1   1   1.882353    1.5294118   0.5517241   1
2   0162le  1   72  5   2   1   2           1.25        0.6153846   1
3   0323er  1   54  30  2.5 3   2.416667    2.5         0.4915254   0
4   0811ne  0   41  21  2   2   2           1.75        0.5333333   0
5   0825en  1   44  31  2   2   2.588235    1.8235294   0.5866667   0

虽然实际数据中有很多很多的变量主题。

我需要做的第一件事是比较“ageBin”的值。 0 = 60 岁以下,1 = 60 岁以上。我想比较这两组之间的统计数据。所以我想我需要的第一件事是能够识别不同的ageBin 值并将这两行。

然后我需要计算两组值的频率(即 1 和 0 的实例数)、“年龄”变量的平均值、年龄变量的中位数、男性(即性别 = 1),meanL 的平均值等。像这样的简单事情。我只是希望它们都在一张桌子上。

所以一个潜在表的例子可能是

            n   nMale   mAge
ageBin 0    14      x     x
ageBin 1    14      x     x

我可以轻松地在 SPSS 甚至 Excel 中完成这些工作......我真的很想开始使用 R。因此,任何人可以提供的任何资源或建议都可以为我指明正确的方向,这将非常有帮助。抱歉,如果这听起来不清楚...如有必要,我可以尝试澄清。

提前谢谢大家。

【问题讨论】:

    标签: r statistics


    【解决方案1】:

    使用plyr() 包拆分数据结构,然后应用一个函数将所有结果重新组合在一起。

    install.packages("plyr") # install package from CRAN
    library(plyr) # load the package into R
    
    dd <- list(subject=c("0146si", "0162le", "1323er", "0811ne", "0825en"),
           sex = c(1,1,1,0,1),
           age = c(67,72,54,41,44),
           nR = c(26,5,30,21,31),
           medL = c(1,2,2.5,2,2),
           medR = c(1,1,3,2,2),
           meanL = c(1.882352,2,2.416667,2,2.588235),
           meanR = c(1.5294118,1.25,2.5,1.75,1.8235294),
           pL = c(0.5517241,0.6153846,0.4915254,0.5333333,0.5866667),
           ageBin = c(1,1,0,0,0))
    
    dd <- data.frame(dd) # convert to data.frame
    

    使用ddply函数,你可以做一些事情,比如计算两组值的频率

    ddply(dd, .(ageBin), summarise, nMale = sum(sex), mAge = mean(age))
    
    ageBin nMale     mAge
    0      2         46.33333
    1      2         69.50000
    

    以下是Sean Anderson 提供的非常有用的资源,可帮助您快速了解 plyr 包。
    包作者 Hadley Wickham 提供的更全面的资源可以在 here 找到。

    【讨论】:

    • 这似乎很有帮助。不过,我的实际数据非常庞大,因此像您那样手动将其全部写入列表是不现实的……有没有办法用 ddply 解决这个问题?
    • 我这样做只是为了在我的计算机上进行模拟。理想情况下,您将使用read.tableread.csv 函数将数据读入r。 ddply 是一个仅用于以所需格式拆分和分组数据框的函数。在您的情况下,您需要将其他变量沿 ageBin 变量分组。简单地说,ddply 的格式是ddply(dataset, variables to group by, function to apply for grouping)。查看我帖子中提供的链接,它们简洁地提供了您需要了解的有关 ddply 的所有信息。
    • @Socratease。您好,请点赞表示感谢。干杯
    【解决方案2】:

    试试by函数:

    如果你的数据框被命名为df

    by(data=df, INDICES=df$ageBin, FUN=summary)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      相关资源
      最近更新 更多