如何在R中的data.table中的列之间循环并使用摘要统计信息创建新表?

时间:2019-02-16 05:36:47

标签: r loops data.table

我试图通过遍历现有数据表的列来创建摘要统计数据表。所以我想计算每列的摘要统计信息。我的数据看起来像这样:

我尝试遍历列,但是当我这样做时,我无法像在常规数据帧中那样正常地提取列。我是data.table软件包的新手,所以我们将不胜感激。

DT <- data.table(math = c(7, 9, 3, 6), physics = c(7, 7, 4, 5), 
                 biology = c(6, 8, 7, 6))

> DT
   math physics biology
1:    7       7       6
2:    9       7       8
3:    3       4       7
4:    6       5       6

我想得到一个新的数据表,看起来像这样:

> DT2
   subject mean median min max
1:    math 6.25    6.5   3   9
2: physics 5.75    6.0   4   7
3: biology 6.75    6.0   6   8

2 个答案:

答案 0 :(得分:0)

这是一个Tidyr解决方案,尽管您可能正在寻找数据。表一:

library(tidyr)

DT <- data.frame(math = c(7, 9, 3, 6), physics = c(7, 7, 4, 5), 
                 biology = c(6, 8, 7, 6))

DTSum <- DT %>% 
  gather() %>% 
  group_by(key) %>% 
  summarize(
    mean = mean(value),
    median = median(value),
    min = min(value),
    max = max(value)
  )

答案 1 :(得分:0)

如果您正在寻找个性化的东西,可以尝试构建一个函数,该函数将根据需要输出描述性表。但是,这带来了很多麻烦。

R中有许多软件包,它们提供了许多可以使用的功能。 psych库产生的输出与您要寻找的结果非常相似。

示例:

library('psych')
DT <- data.frame(math = c(7, 9, 3, 6), physics = c(7, 7, 4, 5), 

                                  biology = c(6, 8, 7, 6))

describe.by(DT) 

Ouput的:

vars      n mean sd median trimmed  mad min   max range  skew
math       1 4 6.25 2.50    6.5    6.25 2.22   3   9     6 -0.21
physics    2 4 5.75 1.50    6.0    5.75 1.48   4   7     3 -0.14
biology    3 4 6.75 0.96    6.5    6.75 0.74   6   8     2  0.32

             kurtosis  se
    math       -1.92 1.25
    physics    -2.28 0.75
    biology    -2.08 0.48