【问题标题】:Aggregate columns in data.table for descriptive statistics聚合 data.table 中的列以进行描述性统计
【发布时间】:2014-12-01 23:05:02
【问题描述】:

我正在查看单个学生级别的学生数据集。

我想做的是在教师学位级别进行一些描述性分析。

也就是说,有些学生正在攻读两个学位(双学位,例如 IT 学士和理学学士),因此有些学生会获得两个学位。

我的数据如下所示。教师分配(无论是 FAC1 还是 FAC2)是任意的。

  studid    FAC1     FAC2   SUCCESS SEX     AVE_MARK  
    1       IT       ARTS     0     Male    65
    2       SCIENCE           1     Male    35
    3       LAW               0     Male    98
    4       IT       SCIENCE  0     Female  55
    5       COMMERCE IT       0     Female  20
    6       COMMERCE IT       1     Male    80

这是用

生成的
students<-data.table(studid=c(1:6) ,FAC1 = c("IT","SCIENCE", "LAW","IT","COMMERCE","COMMERCE"), FAC2 = c("ARTS","","","SCIENCE","IT","IT"), SUCCESS = c(0,1,0,0,0,1), SEX=c("Male","Male","Male","Female","Female","Male"), AVE_MARK=c(65,35,98,55,20,80))

我将如何制作这样的东西(虚构的数字)来创建一个包含 FAC1 和 FAC2 列的 Faculty 列?我一直在尝试在 FAC1 和 FAC2 中使用 lapply 函数,但一直处于死胡同(即 students[, lapply(.SD, mean), by=agg.by, .SDcols=c('FAC1', 'FAC2') ]

  FACULTY    MEAN_SUCCESS    AVE_MARK  
  IT         0.65               65
  SCIENCE    1                  50 
  LAW        0.76               50 
  ARTS       0.55               50 
  COMMERCE   0.40               10 

任何帮助将不胜感激。

【问题讨论】:

    标签: r data.table aggregate


    【解决方案1】:

    这似乎是您正在寻找的。​​p>

    library(reshape2)
    DT <- melt(students,measure.vars=c("FAC1","FAC2"),value.name="FACULTY")[nchar(FACULTY)>0]
    DT[,list(mean_success=mean(SUCCESS),ave_mark=mean(AVE_MARK)),by=FACULTY]
    #     FACULTY mean_success ave_mark
    # 1:       IT         0.25       55
    # 2:  SCIENCE         0.50       45
    # 3:      LAW         0.00       98
    # 4: COMMERCE         0.50       50
    # 5:     ARTS         0.00       65
    

    所以这使用包reshape2 中的melt(...) 函数来折叠两个教师列,复制所有其他列。不幸的是,这会导致某些列的教员空白,因此我们必须摆脱那些使用[nchar(FACULTY)&gt;0] 的列。然后根据(新)FACULTY 列进行聚合就很简单了。

    【讨论】:

    • 恐怕这行不通。我收到以下错误消息:警告消息:在 melt.data.table(students, id = c("PERSON_ID", "success", "SEX", : All 'measure.vars are NOT of the SAME type. By层次顺序,熔化的数据值列将是“字符”类型。因此,所有非“字符”类型的度量变量都将被强制转换。有关强制的更多信息,请查看 ?melt.data.table 的 DETAILS 部分。
    • 不过,我会查看熔体数据表。我认为一种解决方案可能是创建一个新对象,其中具有 FAC1 值的单个值与具有 FAC2 值的单个值组合在一起,FAC1 和 FAC2 在同一列“FACULTY”中。
    • 这可能是因为您的真实数据中有额外的列,而您没有在问题中披露。
    • 查看我上面的编辑;这在您的真实数据集中可能会更好。
    • 是的,将两者叠加在一起,得到了我需要用于教师绩效分析的对象,称为“度”。现在也了解了融化功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    相关资源
    最近更新 更多