【问题标题】:data.table - get molten data by j-functiondata.table - 通过 j 函数获取熔融数据
【发布时间】:2015-01-05 21:41:53
【问题描述】:

我希望得到与使用 data.table 产生的相同的输出,而无需使用 melt 和标记。

DT <- data.table(date=as.IDate(datetime), value=rnorm(10))
DT_melt <- DT[,as.list(summary(value)), by=date]
melt(DT_melt,"date")

结果:

          date variable   value
 1: 2001-01-01     Min. -0.9122
 2: 2001-01-02     Min. -1.2220
 3: 2001-01-01  1st Qu.  0.3462
 4: 2001-01-02  1st Qu. -0.8932
 5: 2001-01-01   Median  0.6230
 6: 2001-01-02   Median -0.2470
 7: 2001-01-01     Mean  0.4189
 8: 2001-01-02     Mean -0.3418
 9: 2001-01-01  3rd Qu.  0.7913
10: 2001-01-02  3rd Qu.  0.2526
11: 2001-01-01     Max.  1.2460
12: 2001-01-02     Max.  0.4010

我想在不融化的情况下实现这一目标。

到目前为止,我设法通过手动标记它来获得它,如下所示:

labels <- names(summary(1))
DT[,list(labels,value=unclass(summary(value))), by=date]

但是有没有办法在data.table 中使用unclass(summary(value)) 的名称? 类似的东西

DT[,c("labels","value"):=unclass(summary(value)), by=date, use.names = TRUE]

【问题讨论】:

  • 这目前似乎无法重现。 datetime 是什么?

标签: r data.table variable-assignment


【解决方案1】:

您可以创建如下函数:

myFun <- function(x) {
  A <- summary(x)
  list(variable = names(A), 
       value = unlist(A, use.names = FALSE))
}

这是一个正在使用的函数的示例。

首先,一些可重现的数据:

datetime <- as.Date("2001-01-01") + 0:1
set.seed(1)
DT <- data.table(date=as.IDate(datetime), value=rnorm(10))

二、应用函数:

DT[, myFun(value), by = date]
#           date variable    value
#  1: 2001-01-01     Min. -0.83560
#  2: 2001-01-01  1st Qu. -0.62650
#  3: 2001-01-01   Median  0.32950
#  4: 2001-01-01     Mean -0.01387
#  5: 2001-01-01  3rd Qu.  0.48740
#  6: 2001-01-01     Max.  0.57580
#  7: 2001-01-02     Min. -0.82050
#  8: 2001-01-02  1st Qu. -0.30540
#  9: 2001-01-02   Median  0.18360
# 10: 2001-01-02     Mean  0.27830
# 11: 2001-01-02  3rd Qu.  0.73830
# 12: 2001-01-02     Max.  1.59500

其他选择可能是:

DT[, stack(summary(value)), by = date]

DT[, as.list(summary(value)), by = date][, list(
  variable = names(.SD), value = unlist(.SD)), by = date]

DT[, list(labels = names(summary(1)), 
          value = summary(value)), by = date]

我不知道你为什么不想只使用meltmelt data.table 非常有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    相关资源
    最近更新 更多